feat:飞行日志接入
This commit is contained in:
parent
b954940576
commit
3488f86386
@ -16,7 +16,7 @@ public enum AircraftDeviceBrandEnum {
|
||||
|
||||
SF("SF", "顺丰"),
|
||||
|
||||
FNZZ("FNZZ", "蜂鸟制造"),
|
||||
FNZZ("FNZZ", "蜂鸟智造"),
|
||||
|
||||
|
||||
;
|
||||
|
||||
@ -13,12 +13,12 @@ import org.springframework.data.mongodb.core.mapping.Document;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 无人机状态信息DTO
|
||||
* 蜂鸟智造-无人机文本日志
|
||||
*/
|
||||
@Data
|
||||
@Document(collection = "fnzz_aircraft_log")
|
||||
@CompoundIndex(name = "uavUUID_timestamp_idx", def = "{'uavUUID': 1, 'timestampString': -1}")
|
||||
@ApiModel(description = "无人机状态信息")
|
||||
@ApiModel(description = "蜂鸟智造-无人机文本日志")
|
||||
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 io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
public class AircraftLogPageDTO {
|
||||
|
||||
|
||||
|
||||
@ -40,4 +40,7 @@ public class AircraftDevicePageVO extends AircraftDevice {
|
||||
@ApiModelProperty(value = "设备图片(只返回一张)")
|
||||
private String deviceImg;
|
||||
|
||||
@ApiModelProperty(value = "无人机状态")
|
||||
private String state;
|
||||
|
||||
}
|
||||
|
||||
@ -19,38 +19,44 @@ public interface AircraftLogService<T extends AbstractAircraftTextLog> {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
abstract boolean support(AircraftDeviceBrandEnum deviceBrandEnum);
|
||||
boolean support(AircraftDeviceBrandEnum deviceBrandEnum);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 文本日志接收-统一存到mongodb
|
||||
*/
|
||||
void textLogReceive(T aircraftLog);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 视频日志接收
|
||||
*/
|
||||
void videoLogReceive(T aircraftLog);
|
||||
|
||||
/**
|
||||
* 分页查询飞行文本日志列表
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
abstract PageResult<AircraftLogPageVO> page(AircraftLogPageDTO dto);
|
||||
|
||||
|
||||
/**
|
||||
* 文本日志接收-统一存到mongodb
|
||||
*/
|
||||
abstract void textLogReceive(T aircraftLog);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 视频日志接收
|
||||
*/
|
||||
public abstract void videoLogReceive(T aircraftLog);
|
||||
|
||||
PageResult<AircraftLogPageVO> page(AircraftLogPageDTO dto);
|
||||
|
||||
/**
|
||||
* 根据ID获取文本日志详情
|
||||
* @param id
|
||||
* @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.lang.reflect.Field;
|
||||
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.List;
|
||||
import java.util.Map;
|
||||
@ -54,6 +50,7 @@ public abstract class AbstractAircraftLogServiceImpl<T extends AbstractAircraftT
|
||||
*/
|
||||
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) {
|
||||
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.modules.aircraft.domain.AircraftDevice;
|
||||
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.mapper.AircraftDeviceMapper;
|
||||
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.service.IAttachmentMaterialService;
|
||||
import com.aircraft.utils.CommonConstant;
|
||||
import com.aircraft.utils.PageResult;
|
||||
import com.aircraft.utils.SecurityUtils;
|
||||
import com.aircraft.utils.enums.AircraftDeviceBrandEnum;
|
||||
import com.aircraft.utils.enums.UserTypeEnum;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
@ -38,6 +42,7 @@ import java.util.List;
|
||||
public class AircraftDeviceServiceImpl extends ServiceImpl<AircraftDeviceMapper, AircraftDevice> implements AircraftDeviceService {
|
||||
|
||||
private final IAttachmentMaterialService attachmentMaterialService;
|
||||
private final AircraftLogStrategyFactory aircraftLogStrategyFactory;
|
||||
|
||||
//todo 枚举?
|
||||
private final String BUSINESS_TYPE = "aircraft_device";
|
||||
@ -63,6 +68,13 @@ public class AircraftDeviceServiceImpl extends ServiceImpl<AircraftDeviceMapper,
|
||||
.oneOpt()
|
||||
.map(AttachmentMaterial::getFileFullPath)
|
||||
.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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user