From 2db1aa88e8ab53096a936163d686b90d8e056a99 Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Wed, 21 Aug 2024 23:18:33 +0800
Subject: [PATCH] 国土对接返回信息加密

---
 src/main/java/com/dji/sample/manage/service/impl/DeviceOSDServiceImpl.java |   66 ++++++++++++++++++++++++++++++++
 1 files changed, 65 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/dji/sample/manage/service/impl/DeviceOSDServiceImpl.java b/src/main/java/com/dji/sample/manage/service/impl/DeviceOSDServiceImpl.java
index b540e08..da15dbb 100644
--- a/src/main/java/com/dji/sample/manage/service/impl/DeviceOSDServiceImpl.java
+++ b/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,12 +74,65 @@
             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())
+                            .trackId(data.getTrackId())
+                            .jobId(String.valueOf(RedisOpsUtils.get(RedisConst.FLIGHT_LOG + "job_id")))
+                            .startFlightDistance(data.getTotalFlightDistance())
+                            .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());
+                    dflPo.setTotalFlightDistance(data.getTotalFlightDistance());
+                    dflPo.setEndFlightDistance(data.getTotalFlightDistance());
+                    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())
+                        .height(data.getHeight())
+                        .elevation(data.getElevation())
+                        .build();
+                droneFlightLogInfoService.save(dfliPo);
+            }
+
             List<DevicePayloadDTO> payloadsList = device.getPayloadsList();
             try {
                 Map<String, Object> receiverData = (Map<String, Object>) receiver.getData();
                 data.setPayloads(payloadsList.stream()
                         .map(payload -> mapper.convertValue(
-                                receiverData.getOrDefault(payload.getPayloadName(), Map.of()),
+                                receiverData.getOrDefault(payload.getPayloadIndex(), Map.of()),
                                 OsdPayloadReceiver.class))
                         .collect(Collectors.toList()));
 

--
Gitblit v1.9.3