|
|
@@ -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();
|
|
|
}
|