From 69f4eab5670f9aa5b5325e6d4d3a8e97f63106cc Mon Sep 17 00:00:00 2001
From: xieb <vip_xiaobin810@163.com>
Date: Sat, 28 Oct 2023 15:23:33 +0800
Subject: [PATCH] 保存无人机飞行轨迹
---
src/main/java/com/dji/sample/manage/service/impl/DeviceOSDServiceImpl.java | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 57 insertions(+), 0 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 e5a596e..6c19fd9 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,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();
--
Gitblit v1.9.3