guoshilong
2023-11-16 3823dc87eb8ef4d5cd25390ec9b17c856d10fafd
src/main/java/com/dji/sample/control/service/impl/DrcServiceImpl.java
@@ -1,5 +1,6 @@
package com.dji.sample.control.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.dji.sample.common.model.ResponseResult;
import com.dji.sample.component.mqtt.config.MqttConfiguration;
import com.dji.sample.component.mqtt.model.*;
@@ -18,6 +19,7 @@
import com.dji.sample.control.service.IControlService;
import com.dji.sample.control.service.IDrcService;
import com.dji.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.manage.model.enums.DockDrcStateEnum;
import com.dji.sample.manage.model.enums.DockModeCodeEnum;
import com.dji.sample.manage.model.enums.UserTypeEnum;
import com.dji.sample.manage.model.receiver.OsdSubDeviceReceiver;
@@ -26,6 +28,7 @@
import com.dji.sample.wayline.model.dto.WaylineTaskProgressReceiver;
import com.dji.sample.wayline.model.enums.WaylineJobStatusEnum;
import com.dji.sample.wayline.model.enums.WaylineTaskStatusEnum;
import com.dji.sample.wayline.model.param.PointPOJO;
import com.dji.sample.wayline.model.param.UpdateJobParam;
import com.dji.sample.wayline.service.IWaylineJobService;
import com.dji.sample.wayline.service.IWaylineRedisService;
@@ -149,7 +152,7 @@
        String pubTopic = topic + TopicConst.DOWN;
        String subTopic = topic + TopicConst.UP;
        // If the dock is in drc mode, refresh the permissions directly.
        // If the dock is in drc mode, refresh the permissions directly. 如果dock处于drc模式,直接刷新权限
        if (deviceService.checkDockDrcMode(param.getDockSn())
                && param.getClientId().equals(this.getDrcModeInRedis(param.getDockSn()))) {
            refreshAcl(param.getDockSn(), param.getClientId(), topic, subTopic);
@@ -209,7 +212,7 @@
    }
    @ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_DRC_STATUS_NOTIFY, outputChannel = ChannelName.OUTBOUND_EVENTS)
    public CommonTopicReceiver handleDrcStatusNotify(CommonTopicReceiver receiver, MessageHeaders headers) {
    public CommonTopicReceiver handleDrcStatusNotify(CommonTopicReceiver receiver, MessageHeaders headers) throws Exception {
        String dockSn  = receiver.getGateway();
        Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(dockSn);
@@ -225,6 +228,26 @@
                            .message(eventsReceiver.getResult().getErrorMsg())
                            .result(eventsReceiver.getResult().getErrorCode()).build());
        }
        //当进入控制时,停止当前的图斑飞行
        if (eventsReceiver.getDrcState()==DockDrcStateEnum.CONNECTED){
            JSONObject jsonObject = (JSONObject) RedisOpsUtils.get("tuban:" + dockSn);
            if (jsonObject != null) {
                controlService.flyToPointStop(dockSn);
            }
        }
        //当退出控制后,继续执行图斑飞行
        if(eventsReceiver.getDrcState() == DockDrcStateEnum.DISCONNECTED){
            JSONObject jsonObject = (JSONObject) RedisOpsUtils.get("tuban:" + dockSn);
            if (jsonObject != null) {
                List<PointPOJO> targetList = (List<PointPOJO>) jsonObject.get("targetList");
                int curIndex = (Integer) jsonObject.get("curIndex");
                String payloadIndex = jsonObject.getString("payloadIndex");
                controlService.flyToNextPoint(targetList, curIndex, dockSn, payloadIndex);
            }
        }
        return receiver;
    }