From 0346ed9f9760bfd136ec01bf14df7fe95f59a603 Mon Sep 17 00:00:00 2001
From: shenyijian <1178253012@qq.com>
Date: Thu, 14 Dec 2023 16:26:22 +0800
Subject: [PATCH] 无人机 -执行飞行任务
---
src/main/java/com/dji/sample/wayline/model/param/CreateJobParam.java | 5 +
src/main/java/com/dji/sample/wayline/controller/WayLineTaskController.java | 27 +++++++++
src/main/java/com/dji/sample/wayline/service/impl/IWayLineTaskServiceImpl.java | 122 ++++++++++++++++++++++++++++++++++++++++
src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java | 4
src/main/java/com/dji/sample/component/mqtt/handler/InboundMessageRouter.java | 2
src/main/java/com/dji/sample/wayline/service/IWayLineTaskService.java | 10 +++
6 files changed, 167 insertions(+), 3 deletions(-)
diff --git a/src/main/java/com/dji/sample/component/mqtt/handler/InboundMessageRouter.java b/src/main/java/com/dji/sample/component/mqtt/handler/InboundMessageRouter.java
index 570e446..5d30c75 100644
--- a/src/main/java/com/dji/sample/component/mqtt/handler/InboundMessageRouter.java
+++ b/src/main/java/com/dji/sample/component/mqtt/handler/InboundMessageRouter.java
@@ -45,7 +45,7 @@
String topic = headers.get(MqttHeaders.RECEIVED_TOPIC).toString();
byte[] payload = (byte[])message.getPayload();
- log.debug("received topic :{} \t payload :{}", topic, new String(payload));
+// log.debug("received topic :{} \t payload :{}", topic, new String(payload));
DeviceTopicEnum topicEnum = DeviceTopicEnum.find(topic);
MessageChannel bean = (MessageChannel) SpringBeanUtils.getBean(topicEnum.getBeanName());
diff --git a/src/main/java/com/dji/sample/wayline/controller/WayLineTaskController.java b/src/main/java/com/dji/sample/wayline/controller/WayLineTaskController.java
new file mode 100644
index 0000000..a7d67fc
--- /dev/null
+++ b/src/main/java/com/dji/sample/wayline/controller/WayLineTaskController.java
@@ -0,0 +1,27 @@
+package com.dji.sample.wayline.controller;
+
+import com.dji.sample.common.model.CustomClaim;
+import com.dji.sample.common.model.ResponseResult;
+import com.dji.sample.log.aspect.SysLogAnnotation;
+import com.dji.sample.wayline.model.param.CreateJobParam;
+import com.dji.sample.wayline.service.IWayLineTaskService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.sql.SQLException;
+
+
+@RequestMapping("${url.wayline.prefix}${url.wayline.version}/workspaces")
+@RestController
+public class WayLineTaskController {
+ @Autowired
+ private IWayLineTaskService iWayLineTaskService;
+
+ @PostMapping("/{workspace_id}/execute_task")
+ @SysLogAnnotation(operModul = "计划库", operType = "新增", operDesc = "执行计划")
+ public ResponseResult executeTask( @Valid @RequestBody CreateJobParam param,
+ @PathVariable(name = "workspace_id") String workspaceId) throws SQLException {
+ return iWayLineTaskService.executeTask(param,workspaceId);
+ }
+}
diff --git a/src/main/java/com/dji/sample/wayline/model/param/CreateJobParam.java b/src/main/java/com/dji/sample/wayline/model/param/CreateJobParam.java
index 9b723b7..b59ead0 100644
--- a/src/main/java/com/dji/sample/wayline/model/param/CreateJobParam.java
+++ b/src/main/java/com/dji/sample/wayline/model/param/CreateJobParam.java
@@ -7,6 +7,7 @@
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
import java.util.List;
/**
@@ -58,4 +59,8 @@
private List<Integer> repRuleVal;
private List<List<Long>> executeStartTimeArr;
+
+ private String jobId;
+
+ private LocalDateTime beginTime;
}
diff --git a/src/main/java/com/dji/sample/wayline/service/IWayLineTaskService.java b/src/main/java/com/dji/sample/wayline/service/IWayLineTaskService.java
new file mode 100644
index 0000000..d604bb8
--- /dev/null
+++ b/src/main/java/com/dji/sample/wayline/service/IWayLineTaskService.java
@@ -0,0 +1,10 @@
+package com.dji.sample.wayline.service;
+
+import com.dji.sample.common.model.ResponseResult;
+import com.dji.sample.wayline.model.param.CreateJobParam;
+
+import java.sql.SQLException;
+
+public interface IWayLineTaskService {
+ ResponseResult executeTask(CreateJobParam param,String workspaceId)throws SQLException;
+}
diff --git a/src/main/java/com/dji/sample/wayline/service/impl/IWayLineTaskServiceImpl.java b/src/main/java/com/dji/sample/wayline/service/impl/IWayLineTaskServiceImpl.java
new file mode 100644
index 0000000..2370496
--- /dev/null
+++ b/src/main/java/com/dji/sample/wayline/service/impl/IWayLineTaskServiceImpl.java
@@ -0,0 +1,122 @@
+package com.dji.sample.wayline.service.impl;
+
+import com.dji.sample.common.model.ResponseResult;
+import com.dji.sample.common.util.MinioUrlUtils;
+import com.dji.sample.component.mqtt.model.EventsReceiver;
+import com.dji.sample.component.mqtt.model.ServiceReply;
+import com.dji.sample.component.mqtt.service.IMessageSenderService;
+import com.dji.sample.manage.service.IDeviceRedisService;
+import com.dji.sample.wayline.model.dto.*;
+import com.dji.sample.wayline.model.enums.WaylineErrorCodeEnum;
+import com.dji.sample.wayline.model.enums.WaylineJobStatusEnum;
+import com.dji.sample.wayline.model.enums.WaylineMethodEnum;
+import com.dji.sample.wayline.model.enums.WaylineTaskTypeEnum;
+import com.dji.sample.wayline.model.param.CreateJobParam;
+import com.dji.sample.wayline.service.IWayLineTaskService;
+import com.dji.sample.wayline.service.IWaylineFileService;
+import lombok.extern.slf4j.Slf4j;
+import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.net.URL;
+import java.sql.SQLException;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.Objects;
+import java.util.Optional;
+
+@Service
+@Slf4j
+public class IWayLineTaskServiceImpl implements IWayLineTaskService {
+ @Autowired
+ private IDeviceRedisService deviceRedisService;
+
+ @Autowired
+ private IWaylineFileService waylineFileService;
+
+ @Autowired
+ private IMessageSenderService messageSender;
+
+ @Override
+ public ResponseResult executeTask(CreateJobParam param,String workspaceId) throws SQLException {
+ WaylineJobDTO waylineJob = param2DTO(param,workspaceId);
+ Integer result = this.prepareFlightTask(waylineJob);
+ boolean isSuccess = result.equals(0);
+ if (!isSuccess) {
+ return ResponseResult.error("任务准备失败,错误码:"+result);
+ }
+ //发出立即任务执行命令
+ Integer executeFlightTask = executeFlightTask(waylineJob);
+ boolean isExecuted = executeFlightTask.equals(0);
+ if (!isExecuted) {
+ return ResponseResult.error("执行任务失败,错误码:"+executeFlightTask);
+ }
+ return ResponseResult.success();
+ }
+
+ private WaylineJobDTO param2DTO(CreateJobParam param,String workspaceId) {
+ return WaylineJobDTO.builder()
+ .jobId(param.getJobId())
+ .fileId(param.getFileId())
+ .dockSn(param.getDockSn())
+ .workspaceId(workspaceId)
+ .executeTime(param.getBeginTime())
+ .beginTime(param.getBeginTime())
+ .taskType(param.getTaskType())
+ .waylineType(param.getWaylineType())
+ .rthAltitude(param.getRthAltitude())
+ .outOfControlAction(param.getOutOfControlAction()).build();
+ }
+
+ private Integer executeFlightTask(WaylineJobDTO waylineJob) {
+ boolean isOnline = deviceRedisService.checkDeviceOnline(waylineJob.getDockSn());
+ if (!isOnline) {
+ throw new RuntimeException("设备离线");
+ }
+ String jobId = waylineJob.getJobId();
+ WaylineTaskCreateDTO flightTask = WaylineTaskCreateDTO.builder().flightId(waylineJob.getJobId()).build();
+
+ ServiceReply serviceReply = messageSender.publishServicesTopic(
+ waylineJob.getDockSn(), WaylineMethodEnum.FLIGHT_TASK_EXECUTE.getMethod(), flightTask, jobId);
+ if (ResponseResult.CODE_SUCCESS != serviceReply.getResult()) {
+ log.info("Execute job ====> Error code: {}", serviceReply.getResult());
+ return serviceReply.getResult();
+ }
+ return ResponseResult.CODE_SUCCESS ;
+ }
+
+ public Integer prepareFlightTask(WaylineJobDTO waylineJob) throws SQLException{
+ boolean isOnline = deviceRedisService.checkDeviceOnline(waylineJob.getDockSn());
+ if (!isOnline) {
+ throw new RuntimeException("设备离线。");
+ }
+
+ Optional<WaylineFileDTO> waylineFile = waylineFileService.getWaylineByWaylineId(waylineJob.getWorkspaceId(), waylineJob.getFileId());
+ if (waylineFile.isEmpty()) {
+ throw new SQLException("航线文件不存在。");
+ }
+
+ URL url = waylineFileService.getObjectUrl(waylineJob.getWorkspaceId(), waylineFile.get().getWaylineId());
+ WaylineTaskCreateDTO flightTask = WaylineTaskCreateDTO.builder()
+ .flightId(waylineJob.getJobId())
+ .executeTime(waylineJob.getBeginTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli())
+ .taskType(waylineJob.getTaskType())
+ .waylineType(waylineJob.getWaylineType())
+ .rthAltitude(waylineJob.getRthAltitude())
+ .outOfControlAction(waylineJob.getOutOfControlAction())
+ .file(WaylineTaskFileDTO.builder()
+ .url(MinioUrlUtils.getUrl(url))
+ .fingerprint(waylineFile.get().getSign())
+ .build())
+ .build();
+
+ ServiceReply serviceReply = messageSender.publishServicesTopic(
+ waylineJob.getDockSn(), WaylineMethodEnum.FLIGHT_TASK_PREPARE.getMethod(), flightTask, waylineJob.getJobId());
+ if (ResponseResult.CODE_SUCCESS != serviceReply.getResult()) {
+ log.info("Prepare task ====> Error code: {}", serviceReply.getResult());
+ return serviceReply.getResult();
+ }
+ return ResponseResult.CODE_SUCCESS;
+ }
+}
diff --git a/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java b/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
index 9ae0776..c5c97ed 100644
--- a/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
+++ b/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
@@ -339,10 +339,10 @@
private Boolean prepareFlightTask(WaylineJobDTO waylineJob) throws SQLException {
- boolean isOnline = deviceRedisService.checkDeviceOnline(waylineJob.getDockSn());
+ /*boolean isOnline = deviceRedisService.checkDeviceOnline(waylineJob.getDockSn());
if (!isOnline) {
throw new RuntimeException("设备离线。");
- }
+ }*/
// get wayline file
Optional<WaylineFileDTO> waylineFile = waylineFileService.getWaylineByWaylineId(waylineJob.getWorkspaceId(), waylineJob.getFileId());
--
Gitblit v1.9.3