Browse Source

机库航点添加 报错方法实现

S0025136190 1 year ago
parent
commit
8e3d1d41cb

+ 81 - 0
Backend/sample/src/main/java/com/dji/sample/manage/model/dto/OsdDroneDTO.java

@@ -0,0 +1,81 @@
+package com.dji.sample.manage.model.dto;
+
+import com.dji.sdk.cloudapi.device.*;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @author huiqing.jiang
+ * @version 1.2
+ * @date 2024/10/9
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class OsdDroneDTO {
+
+    private Float attitudeHead;
+
+    private Double attitudePitch;
+
+    private Double attitudeRoll;
+
+    private Float elevation;
+
+    private DroneBattery battery;
+
+    private String firmwareVersion;
+
+    private GearEnum gear;
+
+    private Float height;
+
+    private Float homeDistance;
+
+    private Float horizontalSpeed;
+
+    private Float latitude;
+
+    private Float longitude;
+
+    private DroneModeCodeEnum modeCode;
+
+    private Double totalFlightDistance;
+
+    private Float totalFlightTime;
+
+    private Float verticalSpeed;
+
+    private WindDirectionEnum windDirection;
+
+    private Float windSpeed;
+
+    private DronePositionState positionState;
+
+    private Storage storage;
+
+    private SwitchActionEnum nightLightsState;
+
+    private Integer heightLimit;
+
+    private DockDistanceLimitStatus distanceLimitStatus;
+
+    private ObstacleAvoidance obstacleAvoidance;
+
+    private Long activationTime;
+
+    private List<OsdCamera> cameras;
+
+    private RcLostActionEnum rcLostAction;
+
+    private Integer rthAltitude;
+
+    private Integer totalFlightSorties;
+
+}

+ 67 - 14
Backend/sample/src/main/java/com/dji/sample/manage/service/impl/SDKDeviceService.java

@@ -1,7 +1,10 @@
 package com.dji.sample.manage.service.impl;
 
 import cn.hutool.core.date.DateUtil;
+import com.dji.sample.manage.model.dto.OsdDroneDTO;
 import com.dji.sample.map.model.dto.FlightTrackDTO;
+import com.dji.sdk.cloudapi.property.DockDroneCommanderFlightHeight;
+import com.dji.sdk.cloudapi.property.DockDroneRthMode;
 import com.dji.sdk.common.CoordinateUtil;
 import com.dji.sample.common.util.UserRequest;
 import com.dji.sample.component.websocket.model.BizCodeEnum;
@@ -30,6 +33,7 @@ import com.dji.sdk.common.SDKManager;
 import com.dji.sdk.mqtt.MqttReply;
 import com.dji.sdk.mqtt.osd.TopicOsdRequest;
 import com.dji.sdk.mqtt.state.TopicStateRequest;
+import com.dji.sdk.mqtt.state.TopicStateResponse;
 import com.dji.sdk.mqtt.status.TopicStatusRequest;
 import com.dji.sdk.mqtt.status.TopicStatusResponse;
 import lombok.extern.slf4j.Slf4j;
@@ -194,7 +198,10 @@ public class SDKDeviceService extends AbstractDeviceService {
         deviceRedisService.setDeviceOnline(device);
         deviceRedisService.setDeviceOsd(from, request.getData());
 
+        OsdDroneDTO data = toDroneDto(request.getData());
         deviceService.pushOsdDataToWeb(device.getWorkspaceId(), BizCodeEnum.DEVICE_OSD, from, request.getData());
+        //添加航点轨迹信息
+        toAddFilghtPoint(from, device, data);
     }
 
     @Override
@@ -242,7 +249,7 @@ public class SDKDeviceService extends AbstractDeviceService {
 
         deviceRedisService.setDeviceOnline(device);
         deviceRedisService.setDeviceOsd(from, request.getData());
-        OsdRcDrone data = request.getData();
+        OsdDroneDTO data = toDroneDto(request.getData());
         deviceService.pushOsdDataToPilot(device.getWorkspaceId(), from,
                 new DeviceOsdHost()
                         .setLatitude(data.getLatitude())
@@ -259,7 +266,7 @@ public class SDKDeviceService extends AbstractDeviceService {
 
     }
 
-    private void toAddFilghtPoint(String from, DeviceDTO device,OsdRcDrone data) {
+    private void toAddFilghtPoint(String from, DeviceDTO device, OsdDroneDTO data) {
 
         switch (data.getModeCode()) {
             case TAKEOFF_FINISHED:
@@ -328,7 +335,7 @@ public class SDKDeviceService extends AbstractDeviceService {
         }
     }
 
-    private List<FlightTrackDTO> getRedisFlightPoint(FlightTaskDTO task,DeviceDTO device,OsdRcDrone data) {
+    private List<FlightTrackDTO> getRedisFlightPoint(FlightTaskDTO task,DeviceDTO device,OsdDroneDTO data) {
         List<FlightTrackDTO> flightPoints = null;
         Optional<List<FlightTrackDTO>> optList = deviceRedisService.getDroneFlyTrack(device.getDeviceSn());
         if(optList.isPresent()) {
@@ -340,7 +347,7 @@ public class SDKDeviceService extends AbstractDeviceService {
         return flightPoints;
     }
 
-    private void addRedisFlightPoint(FlightTaskDTO task, List<FlightTrackDTO> flightPoints, DeviceDTO device,OsdRcDrone data) {
+    private void addRedisFlightPoint(FlightTaskDTO task, List<FlightTrackDTO> flightPoints, DeviceDTO device,OsdDroneDTO data) {
         FlightTrackDTO point = FlightTrackDTO.builder()
                 .taskId(task.getId())
                 .modeCode(data.getModeCode().getCode())
@@ -354,7 +361,7 @@ public class SDKDeviceService extends AbstractDeviceService {
         deviceRedisService.setDroneFlyTrack(device.getDeviceSn(),flightPoints);
     }
 
-    private FlightTaskDTO addFlightPoint(FlightTaskDTO task, DeviceDTO device,OsdRcDrone data) {
+    private FlightTaskDTO addFlightPoint(FlightTaskDTO task, DeviceDTO device,OsdDroneDTO data) {
         synchronized (device.getDeviceSn().intern()) {
             Optional<FlightTrackEntity> lastPoint = deviceRedisService.getLastDroneTrack(device.getDeviceSn());
             long curTime = System.currentTimeMillis();
@@ -434,7 +441,7 @@ public class SDKDeviceService extends AbstractDeviceService {
         }
     }
 
-    private boolean isSamePoint(OsdRcDrone data,FlightTrackEntity lastPoint) {
+    private boolean isSamePoint(OsdDroneDTO data,FlightTrackEntity lastPoint) {
 
         return data.getLongitude().doubleValue() == lastPoint.getLongitude()
                 && data.getLatitude().doubleValue() == lastPoint.getLatitude()
@@ -474,7 +481,6 @@ public class SDKDeviceService extends AbstractDeviceService {
     }
 
     private FlightTaskDTO createFlightTask(DeviceDTO device) {
-        log.info("我进来了");
         Date curTime = new Date();
         String taskName = getTaskName(curTime, device.getDeviceSn());
         return flightTaskService.createFlightTask(FlightTaskEntity.builder()
@@ -607,6 +613,28 @@ public class SDKDeviceService extends AbstractDeviceService {
         log.info("==========rcLiveStatusUpdate=========request:"+ request.toString() + ",headers:" + headers.toString());
     }
 
+    @Override
+    public TopicStateResponse<MqttReply> dockDroneCurrentRthMode(TopicStateRequest<DockDroneCurrentRthMode> request, MessageHeaders headers) {
+        log.info("==========dockDroneCurrentRthMode=========request:"+ request.toString() + ",headers:" + headers.toString());
+        return null;
+    }
+    @Override
+    public TopicStateResponse<MqttReply> dockDroneCurrentCommanderFlightMode(TopicStateRequest<DockDroneCurrentCommanderFlightMode> request, MessageHeaders headers) {
+        log.info("==========dockDroneCurrentCommanderFlightMode=========request:"+ request.toString() + ",headers:" + headers.toString());
+        return null;
+    }
+
+    @Override
+    public TopicStateResponse<MqttReply> dockDroneCommanderFlightHeight(TopicStateRequest<DockDroneCommanderFlightHeight> request, MessageHeaders headers) {
+        log.info("==========dockDroneCommanderFlightHeight=========request:"+ request.toString() + ",headers:" + headers.toString());
+        return null;
+    }
+    @Override
+    public TopicStateResponse<MqttReply> dockDroneRthMode(TopicStateRequest<DockDroneRthMode> request, MessageHeaders headers) {
+        log.info("==========dockDroneRthMode=========request:"+ request.toString() + ",headers:" + headers.toString());
+        return null;
+    }
+
     private void dockGoOnline(DeviceDTO gateway, DeviceDTO subDevice) {
         if (DeviceDomainEnum.DOCK != gateway.getDomain()) {
             return;
@@ -764,13 +792,38 @@ public class SDKDeviceService extends AbstractDeviceService {
         }
     }
 
-    private  boolean areEqual(double a, double b) {
-        // 将 double 值转换为 BigDecimal
-        BigDecimal bdA = new BigDecimal(Double.toString(a));
-        BigDecimal bdB = new BigDecimal(Double.toString(b));
-
-        // 使用 BigDecimal 的 compareTo 方法进行比较
-        return bdA.compareTo(bdB) == 0;
+    private  OsdDroneDTO toDroneDto(Object data) {
+        OsdDroneDTO dto = new OsdDroneDTO();
+        if (data instanceof OsdRcDrone) {
+            OsdRcDrone osdRcDrone = (OsdRcDrone) data;
+            dto.setBattery(osdRcDrone.getBattery());
+            dto.setModeCode(osdRcDrone.getModeCode());
+            dto.setFirmwareVersion(osdRcDrone.getFirmwareVersion());
+            dto.setGear(osdRcDrone.getGear());
+            dto.setAttitudeHead(osdRcDrone.getAttitudeHead());
+            dto.setHeight(osdRcDrone.getHeight());
+            dto.setLongitude(osdRcDrone.getLongitude());
+            dto.setLatitude(osdRcDrone.getLatitude());
+            dto.setElevation(osdRcDrone.getElevation());
+            dto.setWindSpeed(osdRcDrone.getWindSpeed());
+            dto.setTotalFlightTime(osdRcDrone.getTotalFlightTime());
+
+        } else if (data instanceof OsdDockDrone) {
+            OsdDockDrone osdDockDrone = (OsdDockDrone) data;
+            dto.setBattery(osdDockDrone.getBattery());
+            dto.setModeCode(osdDockDrone.getModeCode());
+            dto.setFirmwareVersion(osdDockDrone.getFirmwareVersion());
+            dto.setGear(osdDockDrone.getGear());
+            dto.setAttitudeHead(osdDockDrone.getAttitudeHead());
+            dto.setHeight(osdDockDrone.getHeight());
+            dto.setLongitude(osdDockDrone.getLongitude());
+            dto.setLatitude(osdDockDrone.getLatitude());
+            dto.setElevation(osdDockDrone.getElevation());
+            dto.setWindSpeed(osdDockDrone.getWindSpeed());
+            dto.setTotalFlightTime(osdDockDrone.getTotalFlightTime());
+        }
+
+        return dto;
     }
 
 }