瀏覽代碼

添加抢夺飞机控制权监控日志

S0025136190 1 年之前
父節點
當前提交
c8a04b85e9

+ 5 - 0
Backend/cloud-sdk/src/main/java/com/dji/sdk/mqtt/drc/DrcUpRouter.java

@@ -7,11 +7,14 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.integration.dsl.IntegrationFlow;
 import org.springframework.integration.dsl.IntegrationFlows;
+import org.springframework.integration.mqtt.support.MqttHeaders;
 import org.springframework.messaging.Message;
 
 import java.io.IOException;
 import java.util.Arrays;
 
+import static com.dji.sdk.mqtt.TopicConst.*;
+
 /**
  * @author sean
  * @version 1.1
@@ -27,6 +30,8 @@ public class DrcUpRouter {
                 .transform(Message.class, source -> {
                     try {
                         TopicDrcRequest data = Common.getObjectMapper().readValue((byte[]) source.getPayload(), TopicDrcRequest.class);
+                        String topic = String.valueOf(source.getHeaders().get(MqttHeaders.RECEIVED_TOPIC));
+                        data.setFrom(topic.substring((THING_MODEL_PRE + PRODUCT).length(), topic.indexOf(DRC)));
                         return data.setData(Common.getObjectMapper().convertValue(data.getData(), DrcUpMethodEnum.find(data.getMethod()).getClassType()));
                     } catch (IOException e) {
                         throw new CloudSDKException(e);

+ 13 - 0
Backend/cloud-sdk/src/main/java/com/dji/sdk/mqtt/drc/TopicDrcRequest.java

@@ -11,12 +11,15 @@ public class TopicDrcRequest<T> extends CommonTopicRequest<T> {
 
     private String method;
 
+    private String from;
+
     public TopicDrcRequest() {
     }
 
     @Override
     public String toString() {
         return "TopicDrcRequest{" +
+                "from='" + from + '\'' +
                 "method='" + method + '\'' +
                 ", tid='" + tid + '\'' +
                 ", bid='" + bid + '\'' +
@@ -70,4 +73,14 @@ public class TopicDrcRequest<T> extends CommonTopicRequest<T> {
         return this;
     }
 
+
+    public String getFrom() {
+        return from;
+    }
+
+    public TopicDrcRequest<T> setFrom(String from) {
+        this.from = from;
+        return this;
+    }
+
 }

+ 1 - 0
Backend/sample/src/main/java/com/dji/sample/control/controller/DrcController.java

@@ -39,6 +39,7 @@ public class DrcController {
 
     @PostMapping("/workspaces/{workspace_id}/drc/enter")
     public HttpResultResponse drcEnter(@PathVariable("workspace_id") String workspaceId, @Valid @RequestBody DrcModeParam param) {
+        log.info("============调用DRC飞行控制===========");
         JwtAclDTO acl = drcService.deviceDrcEnter(workspaceId, param);
 
         return HttpResultResponse.success(acl);

+ 3 - 0
Backend/sample/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java

@@ -178,10 +178,13 @@ public class ControlServiceImpl implements IControlService {
         TopicServicesResponse<ServicesReplyData> response;
         switch (authority) {
             case FLIGHT:
+                log.info("=============检查飞机状态,是否A控等================");
                 if (deviceService.checkAuthorityFlight(sn)) {
                     return HttpResultResponse.success();
                 }
+                log.info("=============发送抢夺控制权命令FLIGHT_AUTHORITY_GRAB================");
                 response = abstractControlService.flightAuthorityGrab(SDKManager.getDeviceSDK(sn));
+                log.info("=============抢夺控制权命令FLIGHT_AUTHORITY_GRAB返回信息:" + response);
                 break;
             case PAYLOAD:
                 if (checkPayloadAuthority(sn, param.getPayloadIndex())) {

+ 14 - 2
Backend/sample/src/main/java/com/dji/sample/control/service/impl/DrcServiceImpl.java

@@ -24,19 +24,25 @@ import com.dji.sample.wayline.service.IWaylineJobService;
 import com.dji.sample.wayline.service.IWaylineRedisService;
 import com.dji.sdk.cloudapi.control.DrcModeEnterRequest;
 import com.dji.sdk.cloudapi.control.DrcModeMqttBroker;
+import com.dji.sdk.cloudapi.control.HsiInfoPush;
 import com.dji.sdk.cloudapi.control.api.AbstractControlService;
 import com.dji.sdk.cloudapi.device.DockModeCodeEnum;
 import com.dji.sdk.cloudapi.device.OsdDockDrone;
 import com.dji.sdk.cloudapi.wayline.FlighttaskProgress;
 import com.dji.sdk.common.HttpResultResponse;
 import com.dji.sdk.common.SDKManager;
+import com.dji.sdk.mqtt.ChannelName;
 import com.dji.sdk.mqtt.TopicConst;
+import com.dji.sdk.mqtt.drc.TopicDrcRequest;
 import com.dji.sdk.mqtt.services.ServicesReplyData;
 import com.dji.sdk.mqtt.services.TopicServicesResponse;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.integration.annotation.ServiceActivator;
+import org.springframework.messaging.Message;
+import org.springframework.messaging.MessageHeaders;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
@@ -124,14 +130,17 @@ public class DrcServiceImpl implements IDrcService {
     }
 
     private void checkDrcModeCondition(String workspaceId, String dockSn) {
+        log.info("=============检查是否存在航线任务================");
         Optional<EventsReceiver<FlighttaskProgress>> runningOpt = waylineRedisService.getRunningWaylineJob(dockSn);
         if (runningOpt.isPresent() && WaylineJobStatusEnum.IN_PROGRESS == waylineJobService.getWaylineState(dockSn)) {
+            log.info("=============暂停航线任务================");
             flighttaskService.updateJobStatus(workspaceId, runningOpt.get().getBid(),
                     UpdateJobParam.builder().status(WaylineTaskStatusEnum.PAUSE).build());
         }
 
         DockModeCodeEnum dockMode = deviceService.getDockMode(dockSn);
         Optional<DeviceDTO> dockOpt = deviceRedisService.getDeviceOnline(dockSn);
+        log.info("=============检查记录当前模式DOCKMODE:"+dockMode+"================");
         if (dockOpt.isPresent() && (DockModeCodeEnum.IDLE == dockMode || DockModeCodeEnum.WORKING == dockMode)) {
             Optional<OsdDockDrone> deviceOsd = deviceRedisService.getDeviceOsd(dockOpt.get().getChildDeviceSn(), OsdDockDrone.class);
             if (deviceOsd.isEmpty() || deviceOsd.get().getElevation() <= 0) {
@@ -140,12 +149,13 @@ public class DrcServiceImpl implements IDrcService {
         } else {
             throw new RuntimeException("The current state of the dock does not support entering command flight mode.");
         }
-
+        log.info("=============开始抢夺控制权================");
         HttpResultResponse result = controlService.seizeAuthority(dockSn, DroneAuthorityEnum.FLIGHT, null);
         if (HttpResultResponse.CODE_SUCCESS != result.getCode()) {
+            log.info("=============抢夺控制权失败:" + result.getMessage());
             throw new IllegalArgumentException(result.getMessage());
         }
-
+        log.info("=============抢夺控制权成功:" + result.getMessage());
     }
 
     @Override
@@ -155,8 +165,10 @@ public class DrcServiceImpl implements IDrcService {
         String subTopic = topic + TopicConst.UP;
 
         // If the dock is in drc mode, refresh the permissions directly.
+        log.info("======检查机库是否已经在DRC模式====================");
         if (deviceService.checkDockDrcMode(param.getDockSn())
                 && param.getClientId().equals(this.getDrcModeInRedis(param.getDockSn()))) {
+            log.info("======刷新REDIS DRC模式====================");
             refreshAcl(param.getDockSn(), param.getClientId(), topic, subTopic);
             return JwtAclDTO.builder().sub(List.of(subTopic)).pub(List.of(pubTopic)).build();
         }

+ 34 - 0
Backend/sample/src/main/java/com/dji/sample/control/service/impl/SDKControlService.java

@@ -3,24 +3,34 @@ package com.dji.sample.control.service.impl;
 import com.dji.sample.component.websocket.model.BizCodeEnum;
 import com.dji.sample.component.websocket.service.IWebSocketMessageService;
 import com.dji.sample.control.model.dto.ResultNotifyDTO;
+import com.dji.sample.manage.dao.IDeviceHmsMapper;
 import com.dji.sample.manage.model.dto.DeviceDTO;
+import com.dji.sample.manage.model.entity.DeviceHmsEntity;
 import com.dji.sample.manage.model.enums.UserTypeEnum;
 import com.dji.sample.manage.service.IDeviceRedisService;
 import com.dji.sample.media.service.IMediaRedisService;
 import com.dji.sdk.cloudapi.control.*;
 import com.dji.sdk.cloudapi.control.api.AbstractControlService;
 import com.dji.sdk.cloudapi.device.CameraModeEnum;
+import com.dji.sdk.cloudapi.device.DeviceDomainEnum;
+import com.dji.sdk.cloudapi.hms.HmsFaqIdEnum;
+import com.dji.sdk.cloudapi.hms.HmsInTheSkyEnum;
+import com.dji.sdk.mqtt.ChannelName;
 import com.dji.sdk.mqtt.MqttReply;
+import com.dji.sdk.mqtt.drc.TopicDrcRequest;
 import com.dji.sdk.mqtt.events.EventsDataRequest;
 import com.dji.sdk.mqtt.events.TopicEventsRequest;
 import com.dji.sdk.mqtt.events.TopicEventsResponse;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.integration.annotation.ServiceActivator;
+import org.springframework.messaging.Message;
 import org.springframework.messaging.MessageHeaders;
 import org.springframework.stereotype.Service;
 
 import java.util.Optional;
+import java.util.UUID;
 
 /**
  * @author sean
@@ -43,6 +53,9 @@ public class SDKControlService extends AbstractControlService {
     @Autowired
     private ObjectMapper mapper;
 
+    @Autowired
+    private IDeviceHmsMapper hmsMapper;
+
     @Override
     public TopicEventsResponse<MqttReply> flyToPointProgress(TopicEventsRequest<FlyToPointProgress> request, MessageHeaders headers) {
         String dockSn  = request.getGateway();
@@ -140,4 +153,25 @@ public class SDKControlService extends AbstractControlService {
         mediaRedisService.setCameraMode(dockSn,cameraModeEnum);
         return new TopicEventsResponse<MqttReply>().setData(MqttReply.success());
     }
+
+    @Override
+    public void hsiInfoPush(TopicDrcRequest<HsiInfoPush> request, MessageHeaders headers) {
+        log.error("========="+request.getFrom()+"触发DRC避障信息=========" + request.getData().toString());
+        String gatewaySn = request.getFrom();
+        DeviceHmsEntity entity = DeviceHmsEntity.builder()
+                .bid(request.getBid())
+                .tid(request.getTid())
+                .createTime(request.getTimestamp())
+                .updateTime(0L)
+                .sn(gatewaySn)
+                .level(0)
+                .module(3)
+                .hmsId(UUID.randomUUID().toString())
+                .hmsKey("DRC_HSI")
+                .messageEn(request.getData().toString())
+                .messageZh(request.getData().toString())
+                .build();
+        hmsMapper.insert(entity);
+    }
+
 }