xieb
2023-10-28 69f4eab5670f9aa5b5325e6d4d3a8e97f63106cc
src/main/java/com/dji/sample/manage/service/impl/DeviceOSDServiceImpl.java
@@ -6,11 +6,16 @@
import com.dji.sample.component.websocket.config.ConcurrentWebSocketSession;
import com.dji.sample.component.websocket.model.BizCodeEnum;
import com.dji.sample.component.websocket.model.CustomWebSocketMessage;
import com.dji.sample.log.model.entity.DroneFlightLogEntity;
import com.dji.sample.log.model.entity.DroneFlightLogInfoEntity;
import com.dji.sample.log.service.IDroneFlightLogInfoService;
import com.dji.sample.log.service.IDroneFlightLogService;
import com.dji.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.manage.model.dto.DevicePayloadDTO;
import com.dji.sample.manage.model.dto.TelemetryDTO;
import com.dji.sample.manage.model.dto.TelemetryDeviceDTO;
import com.dji.sample.manage.model.enums.DeviceDomainEnum;
import com.dji.sample.manage.model.enums.DeviceModeCodeEnum;
import com.dji.sample.manage.model.receiver.OsdPayloadReceiver;
import com.dji.sample.manage.model.receiver.OsdSubDeviceReceiver;
import lombok.extern.slf4j.Slf4j;
@@ -31,6 +36,12 @@
@Service
@Slf4j
public class DeviceOSDServiceImpl extends AbstractTSAService {
    @Autowired
    private IDroneFlightLogService droneFlightLogService;
    @Autowired
    private IDroneFlightLogInfoService droneFlightLogInfoService;
    protected DeviceOSDServiceImpl(@Autowired @Qualifier("dockOSDServiceImpl") AbstractTSAService tsaService) {
        super(tsaService);
@@ -63,6 +74,52 @@
            wsMessage.setBizCode(BizCodeEnum.DEVICE_OSD.getCode());
            OsdSubDeviceReceiver data = mapper.convertValue(receiver.getData(), OsdSubDeviceReceiver.class);
            //保存飞行日志 状态启动 "3":"手动飞行","4":"自动起飞","5":"航线飞行"
            if (DeviceModeCodeEnum.MANUAL.getVal() == data.getModeCode().getVal() ||
                    DeviceModeCodeEnum.TAKEOFF_AUTO.getVal() == data.getModeCode().getVal() ||
                    DeviceModeCodeEnum.WAYLINE.getVal() == data.getModeCode().getVal() ) {
                if (!RedisOpsUtils.checkExist(RedisConst.FLIGHT_LOG + device.getDeviceSn())) {
                    // 开始记录日志
                    DroneFlightLogEntity dflPo = DroneFlightLogEntity.builder()
                            .deviceSn(device.getDeviceSn())
                            .deviceName(device.getDeviceName())
                            .nickname(device.getNickname())
                            .workspaceId(device.getWorkspaceId())
                            .title(data.getModeCode().getVal() == 3?"手动飞行":data.getModeCode().getVal() == 4?"自动起飞":data.getModeCode().getVal() == 5?"航线飞行":"未知")
                            .startTime(System.currentTimeMillis())
                            .build();
                    droneFlightLogService.save(dflPo);
                    //缓存对象用于关联数据
                    RedisOpsUtils.set(RedisConst.FLIGHT_LOG + device.getDeviceSn(),dflPo);
                }
            }
            //状态0时取消
            if (DeviceModeCodeEnum.IDLE.getVal() == data.getModeCode().getVal()) {
                //如果存在则删除并保存结束时间
                if (RedisOpsUtils.checkExist(RedisConst.FLIGHT_LOG + device.getDeviceSn())) {
                    DroneFlightLogEntity dflPo = (DroneFlightLogEntity) RedisOpsUtils.get(RedisConst.FLIGHT_LOG + device.getDeviceSn());
                    dflPo.setEndTime(System.currentTimeMillis());
                    droneFlightLogService.update(dflPo);
                    RedisOpsUtils.del(RedisConst.FLIGHT_LOG + device.getDeviceSn());
                }
            }
            //保存无人机实时位置信息
            if (RedisOpsUtils.checkExist(RedisConst.FLIGHT_LOG + device.getDeviceSn())) {
                DroneFlightLogEntity dflPo = (DroneFlightLogEntity) RedisOpsUtils.get(RedisConst.FLIGHT_LOG + device.getDeviceSn());
                DroneFlightLogInfoEntity dfliPo = DroneFlightLogInfoEntity.builder()
                        .latitude(data.getLatitude())
                        .longitude(data.getLongitude())
                        .flightId(dflPo.getId())
                        .build();
                droneFlightLogInfoService.save(dfliPo);
            }
            List<DevicePayloadDTO> payloadsList = device.getPayloadsList();
            try {
                Map<String, Object> receiverData = (Map<String, Object>) receiver.getData();