feat:飞行日志接入
This commit is contained in:
parent
b954940576
commit
3488f86386
@ -16,7 +16,7 @@ public enum AircraftDeviceBrandEnum {
|
|||||||
|
|
||||||
SF("SF", "顺丰"),
|
SF("SF", "顺丰"),
|
||||||
|
|
||||||
FNZZ("FNZZ", "蜂鸟制造"),
|
FNZZ("FNZZ", "蜂鸟智造"),
|
||||||
|
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|||||||
@ -13,12 +13,12 @@ import org.springframework.data.mongodb.core.mapping.Document;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 无人机状态信息DTO
|
* 蜂鸟智造-无人机文本日志
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@Document(collection = "fnzz_aircraft_log")
|
@Document(collection = "fnzz_aircraft_log")
|
||||||
@CompoundIndex(name = "uavUUID_timestamp_idx", def = "{'uavUUID': 1, 'timestampString': -1}")
|
@CompoundIndex(name = "uavUUID_timestamp_idx", def = "{'uavUUID': 1, 'timestampString': -1}")
|
||||||
@ApiModel(description = "无人机状态信息")
|
@ApiModel(description = "蜂鸟智造-无人机文本日志")
|
||||||
public class FNZZAircraftLog extends AbstractAircraftTextLog implements Serializable {
|
public class FNZZAircraftLog extends AbstractAircraftTextLog implements Serializable {
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,11 +2,13 @@ package com.aircraft.modules.aircraft.domain.dto;
|
|||||||
|
|
||||||
import com.alibaba.fastjson2.annotation.JSONField;
|
import com.alibaba.fastjson2.annotation.JSONField;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@Builder
|
||||||
public class AircraftLogPageDTO {
|
public class AircraftLogPageDTO {
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -40,4 +40,7 @@ public class AircraftDevicePageVO extends AircraftDevice {
|
|||||||
@ApiModelProperty(value = "设备图片(只返回一张)")
|
@ApiModelProperty(value = "设备图片(只返回一张)")
|
||||||
private String deviceImg;
|
private String deviceImg;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "无人机状态")
|
||||||
|
private String state;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,38 +19,44 @@ public interface AircraftLogService<T extends AbstractAircraftTextLog> {
|
|||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
abstract boolean support(AircraftDeviceBrandEnum deviceBrandEnum);
|
boolean support(AircraftDeviceBrandEnum deviceBrandEnum);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文本日志接收-统一存到mongodb
|
||||||
|
*/
|
||||||
|
void textLogReceive(T aircraftLog);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 视频日志接收
|
||||||
|
*/
|
||||||
|
void videoLogReceive(T aircraftLog);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询飞行文本日志列表
|
* 分页查询飞行文本日志列表
|
||||||
*
|
*
|
||||||
* @param dto
|
* @param dto
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
abstract PageResult<AircraftLogPageVO> page(AircraftLogPageDTO dto);
|
PageResult<AircraftLogPageVO> page(AircraftLogPageDTO dto);
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 文本日志接收-统一存到mongodb
|
|
||||||
*/
|
|
||||||
abstract void textLogReceive(T aircraftLog);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 视频日志接收
|
|
||||||
*/
|
|
||||||
public abstract void videoLogReceive(T aircraftLog);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据ID获取文本日志详情
|
* 根据ID获取文本日志详情
|
||||||
* @param id
|
* @param id
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public Map<String, Object> getTextLogDetailById(String id);
|
Map<String, Object> getTextLogDetailById(String id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据最后一条飞行文本日志获取飞行状态
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
String getStateByTextLog(AircraftLogPageDTO dto);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,10 +20,6 @@ import javax.annotation.Resource;
|
|||||||
import java.beans.PropertyDescriptor;
|
import java.beans.PropertyDescriptor;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.ZoneId;
|
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -54,6 +50,7 @@ public abstract class AbstractAircraftLogServiceImpl<T extends AbstractAircraftT
|
|||||||
*/
|
*/
|
||||||
protected abstract String getTimeKey();
|
protected abstract String getTimeKey();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 后置处理 - 转换状态等(子类可重写)
|
* 后置处理 - 转换状态等(子类可重写)
|
||||||
*/
|
*/
|
||||||
@ -94,6 +91,39 @@ public abstract class AbstractAircraftLogServiceImpl<T extends AbstractAircraftT
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getStateByTextLog(AircraftLogPageDTO dto) {
|
||||||
|
try {
|
||||||
|
Query query = buildQuery(dto, getModelKey(), getTimeKey());
|
||||||
|
//只查一条
|
||||||
|
dto.setPage(1);
|
||||||
|
dto.setSize(1);
|
||||||
|
|
||||||
|
List<T> content = List.of();
|
||||||
|
// 执行查询
|
||||||
|
|
||||||
|
// 设置分页和排序
|
||||||
|
query.with(Sort.by(Sort.Direction.DESC, getTimeKey()));
|
||||||
|
|
||||||
|
|
||||||
|
content = mongotemplate.find(query, getEntityClass());
|
||||||
|
|
||||||
|
|
||||||
|
AircraftLogPageVO vo = content.stream()
|
||||||
|
.map(this::convertToVO)
|
||||||
|
.toList().stream().findFirst().orElse(null);
|
||||||
|
if (null != vo) {
|
||||||
|
return vo.getState();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
//ignore
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 应用分页逻辑
|
* 应用分页逻辑
|
||||||
*/
|
*/
|
||||||
@ -115,7 +145,7 @@ public abstract class AbstractAircraftLogServiceImpl<T extends AbstractAircraftT
|
|||||||
* 判断是否不需要分页
|
* 判断是否不需要分页
|
||||||
*/
|
*/
|
||||||
protected boolean isNoPagination(AircraftLogPageDTO dto) {
|
protected boolean isNoPagination(AircraftLogPageDTO dto) {
|
||||||
return dto.getPage() < 0 || dto.getSize() < 0;
|
return !(dto.getPage() > 0 && dto.getSize() > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -4,13 +4,17 @@ import com.aircraft.domain.dto.AttachmentMaterialDTO;
|
|||||||
import com.aircraft.exception.BadRequestException;
|
import com.aircraft.exception.BadRequestException;
|
||||||
import com.aircraft.modules.aircraft.domain.AircraftDevice;
|
import com.aircraft.modules.aircraft.domain.AircraftDevice;
|
||||||
import com.aircraft.modules.aircraft.domain.dto.AircraftDevicePageDTO;
|
import com.aircraft.modules.aircraft.domain.dto.AircraftDevicePageDTO;
|
||||||
|
import com.aircraft.modules.aircraft.domain.dto.AircraftLogPageDTO;
|
||||||
import com.aircraft.modules.aircraft.domain.vo.AircraftDevicePageVO;
|
import com.aircraft.modules.aircraft.domain.vo.AircraftDevicePageVO;
|
||||||
import com.aircraft.modules.aircraft.mapper.AircraftDeviceMapper;
|
import com.aircraft.modules.aircraft.mapper.AircraftDeviceMapper;
|
||||||
import com.aircraft.modules.aircraft.service.AircraftDeviceService;
|
import com.aircraft.modules.aircraft.service.AircraftDeviceService;
|
||||||
|
import com.aircraft.modules.aircraft.service.AircraftLogStrategyFactory;
|
||||||
import com.aircraft.modules.system.domain.AttachmentMaterial;
|
import com.aircraft.modules.system.domain.AttachmentMaterial;
|
||||||
import com.aircraft.modules.system.service.IAttachmentMaterialService;
|
import com.aircraft.modules.system.service.IAttachmentMaterialService;
|
||||||
import com.aircraft.utils.CommonConstant;
|
import com.aircraft.utils.CommonConstant;
|
||||||
|
import com.aircraft.utils.PageResult;
|
||||||
import com.aircraft.utils.SecurityUtils;
|
import com.aircraft.utils.SecurityUtils;
|
||||||
|
import com.aircraft.utils.enums.AircraftDeviceBrandEnum;
|
||||||
import com.aircraft.utils.enums.UserTypeEnum;
|
import com.aircraft.utils.enums.UserTypeEnum;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
@ -38,6 +42,7 @@ import java.util.List;
|
|||||||
public class AircraftDeviceServiceImpl extends ServiceImpl<AircraftDeviceMapper, AircraftDevice> implements AircraftDeviceService {
|
public class AircraftDeviceServiceImpl extends ServiceImpl<AircraftDeviceMapper, AircraftDevice> implements AircraftDeviceService {
|
||||||
|
|
||||||
private final IAttachmentMaterialService attachmentMaterialService;
|
private final IAttachmentMaterialService attachmentMaterialService;
|
||||||
|
private final AircraftLogStrategyFactory aircraftLogStrategyFactory;
|
||||||
|
|
||||||
//todo 枚举?
|
//todo 枚举?
|
||||||
private final String BUSINESS_TYPE = "aircraft_device";
|
private final String BUSINESS_TYPE = "aircraft_device";
|
||||||
@ -63,6 +68,13 @@ public class AircraftDeviceServiceImpl extends ServiceImpl<AircraftDeviceMapper,
|
|||||||
.oneOpt()
|
.oneOpt()
|
||||||
.map(AttachmentMaterial::getFileFullPath)
|
.map(AttachmentMaterial::getFileFullPath)
|
||||||
.ifPresent(item::setDeviceImg);
|
.ifPresent(item::setDeviceImg);
|
||||||
|
//获取无人机状态 查日志最后一条记录
|
||||||
|
aircraftLogStrategyFactory.getAllStrategies()
|
||||||
|
.stream()
|
||||||
|
.filter(aircraftLogService -> aircraftLogService.support(AircraftDeviceBrandEnum.find(item.getBrand())))
|
||||||
|
.findFirst()
|
||||||
|
.map(service -> service.getStateByTextLog(AircraftLogPageDTO.builder().model(item.getModel()).build()))
|
||||||
|
.ifPresent(item::setState);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return iPage;
|
return iPage;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user