Browse Source

1.地图元素同步问题 2.设备在线问题,登录Failed 3.ModeCodeReason

S0025136190 1 year ago
parent
commit
0f1f582ed0

+ 32 - 25
Backend/cloud-sdk/src/main/java/com/dji/sdk/cloudapi/device/ModeCodeReasonEnum.java

@@ -13,60 +13,63 @@ import java.util.Arrays;
  */
 public enum ModeCodeReasonEnum {
 
-    NO_MEANING(0),
+    NO_MEANING(0,"N/A"),
 
-    LOW_POWER(1),
+    LOW_POWER(1,"电池电量不足(返航、降落)"),
 
-    LOW_VOLTAGE(2),
+    LOW_VOLTAGE(2,"电池电压不足(返航、降落)"),
 
-    SERIOUS_LOW_VOLTAGE(3),
+    SERIOUS_LOW_VOLTAGE(3,"电压严重过低(返航、降落)"),
 
-    RC_CONTROL(4),
+    RC_CONTROL(4,"遥控器按键请求(起飞、返航、降落)"),
 
-    APP_CONTROL(5),
+    APP_CONTROL(5,"App 请求(起飞、返航、降落)"),
 
-    RC_SIGNAL_LOST(6),
+    RC_SIGNAL_LOST(6,"遥控信号丢失(返航、降落、悬停)"),
 
-    EXTERNAL_DEVICE_TRIGGERED(7),
+    EXTERNAL_DEVICE_TRIGGERED(7,"导航、SDK 等外部设备触发(起飞、返航、降落)"),
 
-    GEO_ZONE(8),
+    GEO_ZONE(8,"进入机场限飞区(降落)"),
 
-    HOME_POINT_TOO_CLOSED(9),
+    HOME_POINT_TOO_CLOSED(9,"虽然触发了返航但是因为距离 Home 点距离太近(降落)"),
 
-    HOME_POINT_TOO_FAR(10),
+    HOME_POINT_TOO_FAR(10,"虽然触发了返航但是因为距离 Home 点距离太远(降落)"),
 
-    EXECUTING_WAYPOINT_MISSION(11),
+    EXECUTING_WAYPOINT_MISSION(11,"执行航点任务时请求(起飞)"),
 
-    ARRIVE_HOME_POINT(12),
+    ARRIVE_HOME_POINT(12,"返航阶段到达 Home 点上方后请求(降落)"),
 
-    SECOND_LIMIT_LANDING(13),
+    SECOND_LIMIT_LANDING(13,"飞行器高度下降,距地面 0.7m(二段降落限低)时,继续下降导致(降落)"),
 
-    APP_FORCIBLY_BREAK_PROTECTION(14),
+    APP_FORCIBLY_BREAK_PROTECTION(14,"App、SDK 等设备强制突破限低保护进行(降落)"),
 
-    PLANES_PASSING_NEARBY(15),
+    PLANES_PASSING_NEARBY(15,"因为周围有航班经过而请求(返航、降落)"),
 
-    HEIGHT_CONTROL_FAILED(16),
+    HEIGHT_CONTROL_FAILED(16,"因为高度控制失败请求(返航、降落)"),
 
-    LOW_POWER_RTH(17),
+    LOW_POWER_RTH(17,"智能低电量返航后进入(降落)"),
 
-    AP_CONTROL(18),
+    AP_CONTROL(18,"AP控制飞行模式(手动飞行)"),
 
-    HARDWARE_ABNORMAL(19),
+    HARDWARE_ABNORMAL(19,"硬件异常(返航、降落)"),
 
-    TOUCHDOWN_AVOIDANCE_PROTECTION(20),
+    TOUCHDOWN_AVOIDANCE_PROTECTION(20,"防触地保护结束(降落)"),
 
-    CANCEL_RTH(21),
+    CANCEL_RTH(21,"返航取消(悬停)"),
 
-    RTH_OBSTACLE_AVOIDANCE(22),
+    RTH_OBSTACLE_AVOIDANCE(22,"返航时遇到障碍物(降落)"),
 
-    RTH_STRONG_GALE(23),
+    RTH_STRONG_GALE(23,"返航时遇到大风(降落)"),
 
     ;
 
     private final int reason;
 
-    ModeCodeReasonEnum(int reason) {
+    private final String text;
+
+    ModeCodeReasonEnum(int reason,String text) {
         this.reason = reason;
+        this.text = text;
     }
 
     @JsonValue
@@ -74,6 +77,10 @@ public enum ModeCodeReasonEnum {
         return reason;
     }
 
+    public String getText() {
+        return text;
+    }
+
     @JsonCreator
     public static ModeCodeReasonEnum find(int reason) {
         return Arrays.stream(values()).filter(reasonEnum -> reasonEnum.reason == reason).findAny()

+ 12 - 0
Backend/cloud-sdk/src/main/java/com/dji/sdk/cloudapi/device/RcDroneControlSource.java

@@ -21,6 +21,8 @@ public class RcDroneControlSource {
 
     private List<RcPayloadControlSource> payloads;
 
+    private ModeCodeReasonEnum modeCodeReason;
+
     public RcDroneControlSource() {
     }
 
@@ -33,6 +35,7 @@ public class RcDroneControlSource {
                 ", lowBatteryWarningThreshold=" + lowBatteryWarningThreshold +
                 ", seriousLowBatteryWarningThreshold=" + seriousLowBatteryWarningThreshold +
                 ", payloads=" + payloads +
+                ", modeCodeReason=" + modeCodeReason +
                 '}';
     }
 
@@ -89,4 +92,13 @@ public class RcDroneControlSource {
         this.payloads = payloads;
         return this;
     }
+
+    public ModeCodeReasonEnum getModeCodeReason() {
+        return modeCodeReason;
+    }
+
+    public RcDroneControlSource setModeCodeReason(ModeCodeReasonEnum modeCodeReason) {
+        this.modeCodeReason = modeCodeReason;
+        return this;
+    }
 }

+ 13 - 1
Backend/sample/src/main/java/com/dji/sample/configuration/GlobalThreadPoolConfiguration.java

@@ -18,7 +18,7 @@ public class GlobalThreadPoolConfiguration {
     @Value("${thread.pool.core-pool-size: 10}")
     private int corePoolSize;
 
-    @Value("${thread.pool.maximum-pool-size: 20}")
+    @Value("${thread.pool.maximum-pool-size: 100}")
     private int maximumPoolSize;
 
     @Value("${thread.pool.keep-alive-time: 60}")
@@ -39,4 +39,16 @@ public class GlobalThreadPoolConfiguration {
                 Executors.defaultThreadFactory(), new ThreadPoolExecutor.DiscardOldestPolicy());
     }
 
+    /**
+     * 文件,图片处理线程池
+     * @return
+     */
+    @Bean
+    public Executor fileThreadPool() {
+        return new ThreadPoolExecutor(5,
+                5, keepAliveTime,
+                TimeUnit.SECONDS, new LinkedBlockingQueue<>(capacity),
+                Executors.defaultThreadFactory(), new ThreadPoolExecutor.DiscardOldestPolicy());
+    }
+
 }

+ 2 - 0
Backend/sample/src/main/java/com/dji/sample/manage/model/dto/DeviceAuthorityDTO.java

@@ -24,4 +24,6 @@ public class DeviceAuthorityDTO {
 
     private ControlSourceEnum controlSource;
 
+    private String modeCodeReason;
+
 }

+ 2 - 5
Backend/sample/src/main/java/com/dji/sample/manage/service/IDeviceService.java

@@ -3,15 +3,12 @@ package com.dji.sample.manage.service;
 import com.dji.sample.common.model.CustomClaim;
 import com.dji.sample.component.websocket.model.BizCodeEnum;
 import com.dji.sample.manage.model.param.DeviceBoundQueryParam;
+import com.dji.sdk.cloudapi.device.*;
 import com.dji.sdk.common.AMap;
 import com.dji.sample.manage.model.dto.DeviceDTO;
 import com.dji.sample.manage.model.dto.DeviceFirmwareUpgradeDTO;
 import com.dji.sample.manage.model.dto.TopologyDeviceDTO;
 import com.dji.sample.manage.model.param.DeviceQueryParam;
-import com.dji.sdk.cloudapi.device.ControlSourceEnum;
-import com.dji.sdk.cloudapi.device.DeviceOsdHost;
-import com.dji.sdk.cloudapi.device.DockModeCodeEnum;
-import com.dji.sdk.cloudapi.device.DroneModeCodeEnum;
 import com.dji.sdk.config.version.GatewayManager;
 import com.dji.sdk.common.HttpResultResponse;
 import com.dji.sdk.common.PaginationData;
@@ -214,7 +211,7 @@ public interface IDeviceService {
 
     void pushOsdDataToWeb(String workspaceId, BizCodeEnum codeEnum, String sn, Object data);
 
-    void updateFlightControl(DeviceDTO gateway, ControlSourceEnum controlSource);
+    void updateFlightControl(DeviceDTO gateway, ControlSourceEnum controlSource, ModeCodeReasonEnum modeCodeReason);
 
     void updateHome(DeviceDTO drone, AMap homePoint);
 }

+ 4 - 3
Backend/sample/src/main/java/com/dji/sample/manage/service/impl/DeviceServiceImpl.java

@@ -278,7 +278,7 @@ public class DeviceServiceImpl implements IDeviceService {
     private void getDeviceStatus(DeviceDTO deviceDTO) {
         Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(deviceDTO.getDeviceSn());
         if(deviceOpt.isPresent()) {
-            String statusText = "设备在线";
+            String statusText = "在线";
             DeviceDomainEnum domain = deviceOpt.get().getDomain();
             if(DeviceDomainEnum.DRONE == domain) {
                 Optional<Object> ObjOpt = deviceRedisService.getDeviceOsd(deviceDTO.getDeviceSn());
@@ -297,7 +297,7 @@ public class DeviceServiceImpl implements IDeviceService {
             }
             deviceDTO.setStatusText(statusText);
         } else {
-            deviceDTO.setStatusText("设备已离线");
+            deviceDTO.setStatusText("离线");
         }
     }
 
@@ -750,7 +750,7 @@ public class DeviceServiceImpl implements IDeviceService {
     }
 
     @Override
-    public void updateFlightControl(DeviceDTO gateway, ControlSourceEnum controlSource) {
+    public void updateFlightControl(DeviceDTO gateway, ControlSourceEnum controlSource, ModeCodeReasonEnum modeCodeReason) {
         if (controlSource == gateway.getControlSource()) {
             return;
         }
@@ -763,6 +763,7 @@ public class DeviceServiceImpl implements IDeviceService {
                         .controlSource(gateway.getControlSource())
                         .sn(gateway.getDeviceSn())
                         .type(DroneAuthorityEnum.FLIGHT)
+                        .modeCodeReason(modeCodeReason == null ? "" : modeCodeReason.getText())
                         .build());
     }
 

+ 5 - 2
Backend/sample/src/main/java/com/dji/sample/manage/service/impl/SDKDeviceService.java

@@ -529,6 +529,7 @@ public class SDKDeviceService extends AbstractDeviceService {
         if (ControlSourceEnum.UNKNOWN == request.getData().getControlSource()) {
             return;
         }
+        log.info("==============dockControlSourceUpdate:" + request.getData().toString());
         Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(request.getFrom());
         if (deviceOpt.isEmpty()) {
             return;
@@ -538,7 +539,7 @@ public class SDKDeviceService extends AbstractDeviceService {
             return;
         }
 
-        deviceService.updateFlightControl(dockOpt.get(), request.getData().getControlSource());
+        deviceService.updateFlightControl(dockOpt.get(), request.getData().getControlSource(),request.getData().getModeCodeReason());
         devicePayloadService.updatePayloadControl(deviceOpt.get(),
                 request.getData().getPayloads().stream()
                         .map(p -> DevicePayloadReceiver.builder()
@@ -547,6 +548,7 @@ public class SDKDeviceService extends AbstractDeviceService {
                                 .sn(p.getSn())
                                 .deviceSn(request.getFrom())
                                 .build()).collect(Collectors.toList()));
+
     }
 
     @Override
@@ -555,6 +557,7 @@ public class SDKDeviceService extends AbstractDeviceService {
         if (ControlSourceEnum.UNKNOWN == request.getData().getControlSource()) {
             return;
         }
+        log.info("==============rcControlSourceUpdate:" + request.getData().toString());
         Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(request.getFrom());
         if (deviceOpt.isEmpty()) {
             return;
@@ -567,7 +570,7 @@ public class SDKDeviceService extends AbstractDeviceService {
         AMap aMap = new AMap(CoordinateUtil.checkValidVal(request.getData().getHomeLongitude()),CoordinateUtil.checkValidVal(request.getData().getHomeLatitude()));
         //home点更新
         deviceService.updateHome(deviceOpt.get(), aMap);
-        deviceService.updateFlightControl(rcOpt.get(), request.getData().getControlSource());
+        deviceService.updateFlightControl(rcOpt.get(), request.getData().getControlSource(),request.getData().getModeCodeReason());
         devicePayloadService.updatePayloadControl(deviceOpt.get(),
                 request.getData().getPayloads().stream()
                         .map(p -> DevicePayloadReceiver.builder()

+ 1 - 0
Backend/sample/src/main/java/com/dji/sample/map/controller/WorkspaceElementController.java

@@ -3,6 +3,7 @@ package com.dji.sample.map.controller;
 import com.dji.sample.common.model.CustomClaim;
 import com.dji.sample.component.websocket.service.IWebSocketMessageService;
 import com.dji.sample.map.service.IWorkspaceElementService;
+import com.dji.sample.media.service.IFileService;
 import com.dji.sdk.cloudapi.map.CreateMapElementRequest;
 import com.dji.sdk.cloudapi.map.CreateMapElementResponse;
 import com.dji.sdk.cloudapi.map.GetMapElementsResponse;

+ 2 - 2
Backend/sample/src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java

@@ -93,7 +93,7 @@ public class FileServiceImpl implements IFileService {
     private  IGroupService groupService;
 
     @Autowired
-    private Executor threadPool;
+    private Executor fileThreadPool;
 
     private static final String IMAGE = "image";
     private static final String VIDEO = "video";
@@ -208,7 +208,7 @@ public class FileServiceImpl implements IFileService {
 
     private void updateExifInfo(MediaFileEntity fileEntity, String workspaceId, MediaUploadCallbackRequest file) {
         //生成缩略图
-        threadPool.execute(new Runnable() {
+        fileThreadPool.execute(new Runnable() {
             @Override
             public void run() {
                 try {

+ 2 - 2
Backend/sample/src/main/resources/application-prd.yml

@@ -25,8 +25,8 @@ spring:
     password:
     lettuce:
       pool:
-        max-active: 8
-        max-idle: 8
+        max-active: 100
+        max-idle: 10
         min-idle: 0
 
   servlet:

+ 2 - 2
Backend/sample/src/main/resources/application-test.yml

@@ -25,8 +25,8 @@ spring:
     password:
     lettuce:
       pool:
-        max-active: 8
-        max-idle: 8
+        max-active: 100
+        max-idle: 10
         min-idle: 0
 
   servlet: