Browse Source

设备状态获取优化

S0025136190 1 year ago
parent
commit
b1878eb9cd

+ 13 - 6
Backend/cloud-sdk/src/main/java/com/dji/sdk/cloudapi/device/DockModeCodeEnum.java

@@ -13,20 +13,23 @@ import java.util.Arrays;
  */
 public enum DockModeCodeEnum {
 
-    IDLE(0),
+    IDLE(0, "空闲中"),
 
-    DEBUGGING(1),
+    DEBUGGING(1, "现场调试"),
 
-    REMOTE_DEBUGGING(2),
+    REMOTE_DEBUGGING(2, "远程调试"),
 
-    UPGRADING(3),
+    UPGRADING(3, "固件升级中"),
 
-    WORKING(4);
+    WORKING(4, "作业中");
 
     private final int code;
 
-    DockModeCodeEnum(int code) {
+    private final String text;
+
+    DockModeCodeEnum(int code,String text) {
         this.code = code;
+        this.text   = text;
     }
 
     @JsonValue
@@ -34,6 +37,10 @@ public enum DockModeCodeEnum {
         return code;
     }
 
+    public String getText() {
+        return text;
+    }
+
     @JsonCreator
     public static DockModeCodeEnum find(int code) {
         return Arrays.stream(values()).filter(modeCode -> modeCode.code == code).findAny()

+ 29 - 22
Backend/cloud-sdk/src/main/java/com/dji/sdk/cloudapi/device/DroneModeCodeEnum.java

@@ -13,54 +13,57 @@ import java.util.Arrays;
  */
 public enum DroneModeCodeEnum {
 
-    IDLE(0),
+    IDLE(0,"待机"),
 
-    TAKEOFF_PREPARE(1),
+    TAKEOFF_PREPARE(1,"起飞准备"),
 
-    TAKEOFF_FINISHED(2),
+    TAKEOFF_FINISHED(2,"起飞准备完毕"),
 
-    MANUAL(3),
+    MANUAL(3,"手动飞行"),
 
-    TAKEOFF_AUTO(4),
+    TAKEOFF_AUTO(4,"自动起飞"),
 
-    WAYLINE(5),
+    WAYLINE(5,"航线飞行"),
 
-    PANORAMIC_SHOT(6),
+    PANORAMIC_SHOT(6,"全景拍照"),
 
-    ACTIVE_TRACK(7),
+    ACTIVE_TRACK(7,"智能跟随"),
 
-    ADS_B_AVOIDANCE(8),
+    ADS_B_AVOIDANCE(8,"躲避"),
 
-    RETURN_AUTO(9),
+    RETURN_AUTO(9,"自动返航"),
 
-    LANDING_AUTO(10),
+    LANDING_AUTO(10,"自动降落"),
 
-    LANDING_FORCED(11),
+    LANDING_FORCED(11,"强制降落"),
 
-    LANDING_THREE_PROPELLER(12),
+    LANDING_THREE_PROPELLER(12,"三桨叶降落"),
 
-    UPGRADING(13),
+    UPGRADING(13,"升级中"),
 
-    DISCONNECTED(14),
+    DISCONNECTED(14,"未连接"),
 
-    APAS(15),
+    APAS(15,"APAS"),
 
-    VIRTUAL_JOYSTICK(16),
+    VIRTUAL_JOYSTICK(16,"虚拟摇杆状态"),
 
-    LIVE_FLIGHT_CONTROLS(17),
+    LIVE_FLIGHT_CONTROLS(17,"指令飞行"),
 
-    AERIAL_RTK_FIXED(18),
+    AERIAL_RTK_FIXED(18,"空中 RTK 收敛模式"),
 
-    DOCK_SITE_EVALUATION(19),
+    DOCK_SITE_EVALUATION(19,"机场选址中"),
 
-    POI(20),
+    POI(20,"POI环绕"),
 
     ;
 
     private final int code;
 
-    DroneModeCodeEnum(int code) {
+    private final String text;
+
+    DroneModeCodeEnum(int code, String text) {
         this.code = code;
+        this.text = text;
     }
 
     @JsonValue
@@ -68,6 +71,10 @@ public enum DroneModeCodeEnum {
         return code;
     }
 
+    public String getText() {
+        return text;
+    }
+
     @JsonCreator
     public static DroneModeCodeEnum find(int code) {
         return Arrays.stream(values()).filter(modeCodeEnum -> modeCodeEnum.ordinal() == code).findAny()

+ 0 - 3
Backend/sample/src/main/java/com/dji/sample/manage/model/dto/DeviceDTO.java

@@ -1,7 +1,6 @@
 package com.dji.sample.manage.model.dto;
 
 import com.dji.sample.manage.model.enums.DeviceFirmwareStatusEnum;
-import com.dji.sample.manage.model.enums.DeviceStatusEnum;
 import com.dji.sdk.cloudapi.device.ControlSourceEnum;
 import com.dji.sdk.cloudapi.device.DeviceDomainEnum;
 import com.dji.sdk.cloudapi.device.DeviceSubTypeEnum;
@@ -70,8 +69,6 @@ public class DeviceDTO {
 
     private DeviceFirmwareStatusEnum firmwareStatus;
 
-    private DeviceStatusEnum deviceStatus;
-
     private Integer firmwareProgress;
 
     private String parentSn;

+ 0 - 104
Backend/sample/src/main/java/com/dji/sample/manage/model/enums/DeviceStatusEnum.java

@@ -1,104 +0,0 @@
-package com.dji.sample.manage.model.enums;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonValue;
-import lombok.Getter;
-
-import java.util.Arrays;
-
-/**
- * @author hqjiang
- * @version 1.0
- * @date 2024/7/2
- */
-public enum DeviceStatusEnum {
-
-    /**
-     * 飞行器未连接
-     */
-    DRONE_DISCONNECTED(0,"飞行器未连接"),
-
-    /**
-     *  飞行器已连接
-     */
-    DRONE_CONNECTED(1,"飞行器已连接"),
-
-    /**
-     * 飞行器待机
-     */
-    DRONE_STANDBY(3,"待机"),
-
-    /**
-     * 飞行器手动飞行
-     */
-    DRONE_FLY_BY_HAND(4,"手动飞行"),
-
-    /**
-     * 飞行器航线飞行
-     */
-    DRONE_FLY_WAYLINE(5,"航线飞行"),
-
-    /**
-     * 飞行器 舱内关机
-     */
-    DRONE_SHUTDOWN_IN_DOCK(6,"舱内关机"),
-
-    /**
-     * 遥控器 设备已离线
-     */
-    REMOTER_CONTROL_DISCONNECTED(20,"设备已离线"),
-
-    /**
-     * 遥控器 设备空闲中
-     */
-    REMOTER_CONTROL_STANDBY(21,"设备空闲中"),
-
-    /**
-     * 遥控器 飞行作业中
-     */
-    REMOTER_CONTROL_FLYING(22,"飞行作业中"),
-
-    /**
-     * 机场 设备已离线
-     */
-    DOCK_DISCONNECTED(30,"设备已离线"),
-
-    /**
-     * 机场 设备空闲中
-     */
-    DOCK_STANDBY(31,"设备空闲中"),
-
-    /**
-     * 机场 飞行作业中
-     */
-    DOCK_FLYING(32,"飞行作业中"),
-
-    UNKNOWN(-1,"N/A");
-
-    int val;
-
-    String text;
-
-    @JsonValue
-    public int getVal() {
-        return val;
-    }
-
-    public String getText() {
-        return text;
-    }
-
-    DeviceStatusEnum(int val,String text) {
-        this.val = val;
-        this.text = text;
-    }
-
-    @JsonCreator
-    public static DeviceStatusEnum find(int val) {
-        return Arrays.stream(DeviceStatusEnum.values())
-                .filter(firmwareStatus -> firmwareStatus.val == val)
-                .findFirst().orElse(UNKNOWN);
-    }
-
-
-}

+ 8 - 6
Backend/sample/src/main/java/com/dji/sample/manage/service/IDeviceRedisService.java

@@ -1,7 +1,6 @@
 package com.dji.sample.manage.service;
 
 import com.dji.sample.component.mqtt.model.EventsReceiver;
-import com.dji.sample.manage.model.enums.DeviceStatusEnum;
 import com.dji.sdk.common.AMap;
 import com.dji.sample.manage.model.dto.DeviceDTO;
 import com.dji.sample.map.model.dto.FlightTaskDTO;
@@ -63,6 +62,9 @@ public interface IDeviceRedisService {
      * @return
      */
     <T> Optional<T> getDeviceOsd(String sn, Class<T> clazz);
+
+    Optional<Object> getDeviceOsd(String sn);
+
     /**
      * Delete the device's osd real-time data.
      * @param sn
@@ -146,9 +148,9 @@ public interface IDeviceRedisService {
 
     Boolean delDroneFlyTrack(String sn);
 
-    void setDeviceStatus(String deviceSn, DeviceStatusEnum deviceStatus);
-
-    Optional<DeviceStatusEnum> getDeviceStatus(String sn);
-
-    Boolean delDeviceStatus(String sn);
+//    void setDeviceStatus(String deviceSn, DeviceStatusEnum deviceStatus);
+//
+//    Optional<DeviceStatusEnum> getDeviceStatus(String sn);
+//
+//    Boolean delDeviceStatus(String sn);
 }

+ 19 - 17
Backend/sample/src/main/java/com/dji/sample/manage/service/impl/DeviceRedisServiceImpl.java

@@ -3,7 +3,6 @@ package com.dji.sample.manage.service.impl;
 import com.dji.sample.component.mqtt.model.EventsReceiver;
 import com.dji.sample.component.redis.RedisConst;
 import com.dji.sample.component.redis.RedisOpsUtils;
-import com.dji.sample.manage.model.enums.DeviceStatusEnum;
 import com.dji.sdk.common.AMap;
 import com.dji.sample.manage.model.dto.DeviceDTO;
 import com.dji.sample.manage.service.ICapacityCameraService;
@@ -45,12 +44,10 @@ public class DeviceRedisServiceImpl implements IDeviceRedisService {
     @Override
     public void setDeviceOnline(DeviceDTO device) {
         RedisOpsUtils.setWithExpire(RedisConst.DEVICE_ONLINE_PREFIX + device.getDeviceSn(), device, RedisConst.DEVICE_ALIVE_SECOND);
-        setDeviceStatus(device.getDeviceSn(),device.getDeviceStatus());
     }
 
     @Override
     public Boolean delDeviceOnline(String sn) {
-        delDeviceStatus(sn);
         return RedisOpsUtils.del(RedisConst.DEVICE_ONLINE_PREFIX + sn);
     }
 
@@ -64,6 +61,11 @@ public class DeviceRedisServiceImpl implements IDeviceRedisService {
         return Optional.ofNullable(clazz.cast(RedisOpsUtils.get(RedisConst.OSD_PREFIX + sn)));
     }
 
+    @Override
+    public Optional<Object> getDeviceOsd(String sn) {
+        return Optional.ofNullable(RedisOpsUtils.get(RedisConst.OSD_PREFIX + sn));
+    }
+
     @Override
     public Boolean delDeviceOsd(String sn) {
         return RedisOpsUtils.del(RedisConst.OSD_PREFIX + sn);
@@ -191,20 +193,20 @@ public class DeviceRedisServiceImpl implements IDeviceRedisService {
         return RedisOpsUtils.del(RedisConst.DRONE_FLY_TRACK + sn);
     }
 
-    @Override
-    public void setDeviceStatus(String deviceSn, DeviceStatusEnum deviceStatus) {
-        RedisOpsUtils.setWithExpire(RedisConst.DEVICE_STATUS + deviceSn, deviceStatus, RedisConst.DRONE_HOME_ALIVE_SECOND);
-    }
-
-    @Override
-    public Optional<DeviceStatusEnum> getDeviceStatus(String sn) {
-        return Optional.ofNullable((DeviceStatusEnum) RedisOpsUtils.get(RedisConst.DEVICE_STATUS + sn));
-    }
-
-    @Override
-    public Boolean delDeviceStatus(String sn) {
-        return RedisOpsUtils.del(RedisConst.DEVICE_STATUS + sn);
-    }
+//    @Override
+//    public void setDeviceStatus(String deviceSn, DeviceModelEnum deviceStatus) {
+//        RedisOpsUtils.setWithExpire(RedisConst.DEVICE_STATUS + deviceSn, deviceStatus, RedisConst.DRONE_HOME_ALIVE_SECOND);
+//    }
+//
+//    @Override
+//    public Optional<DeviceStatusEnum> getDeviceStatus(String sn) {
+//        return Optional.ofNullable((DeviceStatusEnum) RedisOpsUtils.get(RedisConst.DEVICE_STATUS + sn));
+//    }
+//
+//    @Override
+//    public Boolean delDeviceStatus(String sn) {
+//        return RedisOpsUtils.del(RedisConst.DEVICE_STATUS + sn);
+//    }
 
 
 }

+ 25 - 5
Backend/sample/src/main/java/com/dji/sample/manage/service/impl/DeviceServiceImpl.java

@@ -260,7 +260,6 @@ public class DeviceServiceImpl implements IDeviceService {
 
     @Override
     public void spliceDeviceTopo(DeviceDTO gateway) {
-        getDeviceStatus(gateway);
         gateway.setStatus(deviceRedisService.checkDeviceOnline(gateway.getDeviceSn()));
 
         // sub device
@@ -269,7 +268,6 @@ public class DeviceServiceImpl implements IDeviceService {
         }
 
         DeviceDTO subDevice = getDevicesByParams(DeviceQueryParam.builder().deviceSn(gateway.getChildDeviceSn()).build()).get(0);
-        getDeviceStatus(subDevice);
         subDevice.setStatus(deviceRedisService.checkDeviceOnline(subDevice.getDeviceSn()));
         gateway.setChildren(subDevice);
 
@@ -278,9 +276,26 @@ public class DeviceServiceImpl implements IDeviceService {
     }
 
     private void getDeviceStatus(DeviceDTO deviceDTO) {
-        Optional<DeviceStatusEnum> deviceStatusOpt = deviceRedisService.getDeviceStatus(deviceDTO.getDeviceSn());
-        if(deviceStatusOpt.isPresent()) {
-            deviceDTO.setStatusText(deviceStatusOpt.get().getText());
+        Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(deviceDTO.getDeviceSn());
+        if(deviceOpt.isPresent()) {
+            String statusText = "设备在线";
+            DeviceDomainEnum domain = deviceOpt.get().getDomain();
+            if(DeviceDomainEnum.DRONE == domain) {
+                Optional<Object> ObjOpt = deviceRedisService.getDeviceOsd(deviceDTO.getDeviceSn());
+                if(ObjOpt.isPresent()) {
+                    if(ObjOpt.get() instanceof OsdRcDrone) {
+                        statusText = ((OsdRcDrone)ObjOpt.get()).getModeCode().getText();
+                    } else if (ObjOpt.get() instanceof OsdDockDrone) {
+                        statusText = ((OsdDockDrone)ObjOpt.get()).getModeCode().getText();
+                    }
+                }
+            } else if (DeviceDomainEnum.DOCK == domain) {
+                Optional<OsdDock> osdDockOpt = deviceRedisService.getDeviceOsd(deviceDTO.getDeviceSn(),OsdDock.class);
+                if(osdDockOpt.isPresent()) {
+                    statusText = osdDockOpt.get().getModeCode().getText();
+                }
+            }
+            deviceDTO.setStatusText(statusText);
         } else {
             deviceDTO.setStatusText("设备已离线");
         }
@@ -559,6 +574,11 @@ public class DeviceServiceImpl implements IDeviceService {
                 device.setChildren(child);
             });
         }
+        //设置设备状态
+        getDeviceStatus(device);
+        if(device.getChildren() != null) {
+            getDeviceStatus(device.getChildren());
+        }
 
         return device;
     }

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

@@ -240,7 +240,7 @@ public class SDKDeviceService extends AbstractDeviceService {
         }
 
         deviceRedisService.setDeviceOnline(device);
-
+        deviceRedisService.setDeviceOsd(from, request.getData());
         OsdRcDrone data = request.getData();
         deviceService.pushOsdDataToPilot(device.getWorkspaceId(), from,
                 new DeviceOsdHost()