From 3ba2ea4de914835bc316826f2c7f93a648760e9c Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Tue, 26 Sep 2023 16:24:56 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/main'

---
 src/main/java/com/dji/sample/wayline/controller/WaylineFileController.java             |    3 -
 src/main/java/com/dji/sample/component/mqtt/model/CommonTopicReceiver.java             |    2 
 src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java              |    8 ++--
 src/main/java/com/dji/sample/component/mqtt/service/impl/MessageSenderServiceImpl.java |   37 ++++++++++++++++++
 src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java           |   30 ++++++++-------
 src/main/java/com/dji/sample/control/service/IControlService.java                      |    3 +
 src/main/java/com/dji/sample/component/mqtt/service/IMessageSenderService.java         |    7 +++
 src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java              |    8 ++++
 src/main/resources/application.yml                                                     |    4 +-
 src/main/java/com/dji/sample/component/mqtt/model/CommonTopicResponse.java             |    3 +
 10 files changed, 80 insertions(+), 25 deletions(-)

diff --git a/src/main/java/com/dji/sample/component/mqtt/model/CommonTopicReceiver.java b/src/main/java/com/dji/sample/component/mqtt/model/CommonTopicReceiver.java
index 6090338..b892452 100644
--- a/src/main/java/com/dji/sample/component/mqtt/model/CommonTopicReceiver.java
+++ b/src/main/java/com/dji/sample/component/mqtt/model/CommonTopicReceiver.java
@@ -4,7 +4,7 @@
 import lombok.Data;
 
 /**
- * Unified topic receiving format.
+ * 统一主题接收格式。
  * @author sean.zhou
  * @date 2021/11/10
  * @version 0.1
diff --git a/src/main/java/com/dji/sample/component/mqtt/model/CommonTopicResponse.java b/src/main/java/com/dji/sample/component/mqtt/model/CommonTopicResponse.java
index e8055c0..abf2de4 100644
--- a/src/main/java/com/dji/sample/component/mqtt/model/CommonTopicResponse.java
+++ b/src/main/java/com/dji/sample/component/mqtt/model/CommonTopicResponse.java
@@ -7,7 +7,7 @@
 import lombok.NoArgsConstructor;
 
 /**
- * Unified Topic response format
+ * 统一主题响应格式
  * @author sean.zhou
  * @date 2021/11/15
  * @version 0.1
@@ -28,6 +28,7 @@
     private String bid;
 
     private String method;
+    private String gateway;
 
     private T data;
 
diff --git a/src/main/java/com/dji/sample/component/mqtt/service/IMessageSenderService.java b/src/main/java/com/dji/sample/component/mqtt/service/IMessageSenderService.java
index 341c1b2..6611ade 100644
--- a/src/main/java/com/dji/sample/component/mqtt/service/IMessageSenderService.java
+++ b/src/main/java/com/dji/sample/component/mqtt/service/IMessageSenderService.java
@@ -88,4 +88,11 @@
      * @return
      */
     ServiceReply publishServicesTopic(String sn, String method, Object data);
+
+    <T> ServiceReply<T> publishRequestsTopic(TypeReference<T> clazz, String sn, String method, Object data, String bid);
+
+    ServiceReply publishRequestsTopic(String sn, String method, Object data, String bid);
+
+    ServiceReply publishRequestsTopic(String sn, String method, Object data);
+
 }
diff --git a/src/main/java/com/dji/sample/component/mqtt/service/impl/MessageSenderServiceImpl.java b/src/main/java/com/dji/sample/component/mqtt/service/impl/MessageSenderServiceImpl.java
index fdaf62c..237713c 100644
--- a/src/main/java/com/dji/sample/component/mqtt/service/impl/MessageSenderServiceImpl.java
+++ b/src/main/java/com/dji/sample/component/mqtt/service/impl/MessageSenderServiceImpl.java
@@ -71,7 +71,7 @@
             response.setBid(UUID.randomUUID().toString());
             response.setTid(UUID.randomUUID().toString());
         }
-        throw new RuntimeException("No message reply received.");
+        throw new RuntimeException("没有收到消息回复。");
     }
 
     @Override
@@ -113,4 +113,39 @@
         return this.publishServicesTopic(null, sn, method, data, null);
     }
 
+    @Override
+    public  <T> ServiceReply<T> publishRequestsTopic(TypeReference<T> clazz, String sn, String method, Object data, String bid) {
+        String topic = TopicConst.THING_MODEL_PRE + TopicConst.PRODUCT + sn + TopicConst.REQUESTS_SUF;
+        ServiceReply reply = this.publishWithReply(ServiceReply.class, topic,
+                CommonTopicResponse.builder()
+                        .tid(UUID.randomUUID().toString())
+                        .bid(StringUtils.hasText(bid) ? bid : UUID.randomUUID().toString())
+                        .timestamp(System.currentTimeMillis())
+                        .gateway(sn)
+                        .method(method)
+                        .data(Objects.requireNonNullElse(data, ""))
+                        .build());
+        if (Objects.isNull(clazz)) {
+            return reply;
+        }
+        // put together in "output"
+        if (Objects.nonNull(reply.getInfo())) {
+            reply.setOutput(mapper.convertValue(reply.getInfo(), clazz));
+        }
+        if (Objects.nonNull(reply.getOutput())) {
+            reply.setOutput(mapper.convertValue(reply.getOutput(), clazz));
+        }
+        return reply;
+    }
+
+    @Override
+    public ServiceReply publishRequestsTopic(String sn, String method, Object data, String bid) {
+        return this.publishRequestsTopic(null, sn, method, data, bid);
+    }
+
+    @Override
+    public ServiceReply publishRequestsTopic(String sn, String method, Object data) {
+        return this.publishRequestsTopic(null, sn, method, data, null);
+    }
+
 }
\ No newline at end of file
diff --git a/src/main/java/com/dji/sample/control/service/IControlService.java b/src/main/java/com/dji/sample/control/service/IControlService.java
index f9e122b..ac49f0e 100644
--- a/src/main/java/com/dji/sample/control/service/IControlService.java
+++ b/src/main/java/com/dji/sample/control/service/IControlService.java
@@ -76,4 +76,7 @@
      * @return
      */
     ResponseResult payloadCommands(PayloadCommandsParam param) throws Exception;
+
+    ResponseResult requestsConfig(String sn,String method, RequestsParam param);
+
 }
diff --git a/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java b/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java
index 652ba1f..3f1ae9d 100644
--- a/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java
+++ b/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java
@@ -298,4 +298,12 @@
                 : ResponseResult.success();
     }
 
+    @Override
+    public ResponseResult requestsConfig(String sn,String method, RequestsParam param) {
+        ServiceReply serviceReply = messageSenderService.publishRequestsTopic(sn, method, param);
+        return ResponseResult.CODE_SUCCESS != serviceReply.getResult() ?
+                ResponseResult.error(serviceReply.getResult(), " Error Code:" + serviceReply.getResult())
+                : ResponseResult.success();
+    }
+
 }
diff --git a/src/main/java/com/dji/sample/wayline/controller/WaylineFileController.java b/src/main/java/com/dji/sample/wayline/controller/WaylineFileController.java
index 49cdad2..81e3674 100644
--- a/src/main/java/com/dji/sample/wayline/controller/WaylineFileController.java
+++ b/src/main/java/com/dji/sample/wayline/controller/WaylineFileController.java
@@ -181,12 +181,11 @@
      * @return
      */
     @PostMapping("/{workspace_id}/waylines/file/upload")
-    public ResponseResult importKmzFile(HttpServletRequest request, MultipartFile file) {
+    public ResponseResult importKmzFile(@PathVariable(name = "workspace_id") String workspaceId,HttpServletRequest request, MultipartFile file) {
         if (Objects.isNull(file)) {
             return ResponseResult.error("No file received.");
         }
         CustomClaim customClaim = (CustomClaim)request.getAttribute(TOKEN_CLAIM);
-        String workspaceId = customClaim.getWorkspaceId();
         String creator = customClaim.getUsername();
         waylineFileService.importKmzFile(file, workspaceId, creator);
         return ResponseResult.success();
diff --git a/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java b/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java
index cbc8ad4..29277d0 100644
--- a/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java
+++ b/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java
@@ -31,7 +31,7 @@
     private IWaylineJobService waylineJobService;
 
     /**
-     * Create a wayline task for the Dock.
+     * 创建航路任务。
      * @param request
      * @param param
      * @param workspaceId
@@ -48,7 +48,7 @@
     }
 
     /**
-     * Paginate through all jobs in this workspace.
+     * 分页查询
      * @param page
      * @param pageSize
      * @param workspaceId
@@ -63,7 +63,7 @@
     }
 
     /**
-     * Send the command to cancel the jobs.
+     * 发送命令取消作业。
      * @param jobIds
      * @param workspaceId
      * @return
@@ -77,7 +77,7 @@
     }
 
     /**
-     * Set the media files for this job to upload immediately.
+     * 将此作业的媒体文件设置为立即上传。
      * @param workspaceId
      * @param jobId
      * @return
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 1ee81ad..796a705 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
@@ -142,24 +142,26 @@
     }
 
     /**
-     * For immediate tasks, the server time shall prevail.
+     * 对于即时任务,以服务器时间为准。
      * @param param
      */
     private void fillImmediateTime(CreateJobParam param) {
         if (WaylineTaskTypeEnum.IMMEDIATE != param.getTaskType()) {
             return;
         }
-        long now = System.currentTimeMillis() / 1000;
-        param.setTaskDays(Collections.singletonList(now));
-        param.setTaskPeriods(Collections.singletonList(Collections.singletonList(now)));
+        long now = System.currentTimeMillis() / 1000 - 10;
+//        param.setTaskDays(Collections.singletonList(now));
+//        param.setTaskPeriods(Collections.singletonList(Collections.singletonList(now)));
+        param.setTaskDays(List.of(now));
+        param.setTaskPeriods(List.of(List.of(now)));
     }
 
     @Override
     public ResponseResult publishFlightTask(CreateJobParam param, CustomClaim customClaim) throws SQLException {
         fillImmediateTime(param);
 
-        param.getTaskDays().sort((a, b) -> (int) (a - b));
-        param.getTaskPeriods().sort((a, b) -> (int) (a.get(0) - b.get(0)));
+//        param.getTaskDays().sort((a, b) -> (int) (a - b));
+//        param.getTaskPeriods().sort((a, b) -> (int) (a.get(0) - b.get(0)));
         for (Long taskDay : param.getTaskDays()) {
             LocalDate date = LocalDate.ofInstant(Instant.ofEpochSecond(taskDay), ZoneId.systemDefault());
             for (List<Long> taskPeriod : param.getTaskPeriods()) {
@@ -173,16 +175,16 @@
                 }
                 Optional<WaylineJobDTO> waylineJobOpt = this.createWaylineJob(param, customClaim.getWorkspaceId(), customClaim.getUsername(), beginTime, endTime);
                 if (waylineJobOpt.isEmpty()) {
-                    return ResponseResult.error("Failed to create wayline job.");
+                    throw new SQLException("Failed to create wayline job.");
                 }
-
                 WaylineJobDTO waylineJob = waylineJobOpt.get();
-                if (WaylineTaskTypeEnum.IMMEDIATE == param.getTaskType()) {
-                    return this.publishOneFlightTask(waylineJob);
-                }
-
                 // If it is a conditional task type, add conditions to the job parameters.
                 addPreparedJob(waylineJob, param, beginTime, endTime);
+
+                ResponseResult response = this.publishOneFlightTask(waylineJob);
+                if (ResponseResult.CODE_SUCCESS != response.getCode()) {
+                    return response;
+                }
             }
         }
         return ResponseResult.success();
@@ -232,13 +234,13 @@
 
         boolean isOnline = deviceRedisService.checkDeviceOnline(waylineJob.getDockSn());
         if (!isOnline) {
-            throw new RuntimeException("Dock is offline.");
+            throw new RuntimeException("设备离线。");
         }
 
         // get wayline file
         Optional<WaylineFileDTO> waylineFile = waylineFileService.getWaylineByWaylineId(waylineJob.getWorkspaceId(), waylineJob.getFileId());
         if (waylineFile.isEmpty()) {
-            throw new SQLException("Wayline file doesn't exist.");
+            throw new SQLException("航线文件不存在。");
         }
 
         // get file url
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index fac0e7b..3867c73 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -59,7 +59,7 @@
     path:
     # Topics that need to be subscribed when initially connecting to mqtt, multiple topics are divided by ",".
 #    inbound-topic: sys/product/+/status,thing/product/+/requests
-    inbound-topic: sys/product/+/status,thing/product/+/requests
+    inbound-topic: sys/product/+/+,thing/product/+/+
   DRC:
     protocol: WS # @see com.dji.sample.component.mqtt.model.MqttProtocolEnum
     host: 182.106.212.58
@@ -135,7 +135,7 @@
 
 ntp:
   server:
-    host: Google.mzr.me
+    host: ntp.ntsc.ac.cn
 
 # To create a license for an application: https://developer.dji.com/user/apps/#all
 cloud-api:

--
Gitblit v1.9.3