From 64972e9093fa9dde9ce346273b27445bd9d004b9 Mon Sep 17 00:00:00 2001
From: zhaowenyu <35589726@qq.com>
Date: Wed, 24 Dec 2025 15:14:25 +0800
Subject: [PATCH] 2025-12-24 zwy 增加计划任务轨迹功能,将在计划任务执行期间的飞行轨迹数据、任务状态数据保存;同时将计划任务数据保存到计划任务历史表中保存。并提供完整的轨迹提取接口。

---
 ard-sample/src/main/java/com/ard/sample/wayline/service/impl/FlightTaskServiceImpl.java |   44 +++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 39 insertions(+), 5 deletions(-)

diff --git a/ard-sample/src/main/java/com/ard/sample/wayline/service/impl/FlightTaskServiceImpl.java b/ard-sample/src/main/java/com/ard/sample/wayline/service/impl/FlightTaskServiceImpl.java
index 3f7a629..1832c0c 100644
--- a/ard-sample/src/main/java/com/ard/sample/wayline/service/impl/FlightTaskServiceImpl.java
+++ b/ard-sample/src/main/java/com/ard/sample/wayline/service/impl/FlightTaskServiceImpl.java
@@ -15,12 +15,15 @@
 import com.ard.sample.component.websocket.service.IWebSocketManageService;
 import com.ard.sample.manage.model.dto.DeviceDTO;
 import com.ard.sample.manage.model.enums.UserTypeEnum;
+import com.ard.sample.manage.service.IWaylineTrajectoryService;
 import com.ard.sample.media.model.MediaFileCountDTO;
 import com.ard.sample.wayline.model.dto.WaylineJobDTO;
 import com.ard.sample.wayline.model.dto.WaylineTaskProgressExt;
 import com.ard.sample.wayline.model.dto.WaylineTaskProgressReceiver;
+import com.ard.sample.wayline.model.entity.WaylineJobHistoryEntity;
 import com.ard.sample.wayline.model.enums.WaylineJobStatusEnum;
 import com.ard.sample.wayline.service.IFlightTaskService;
+import com.ard.sample.wayline.service.IWaylineJobHistoryService;
 import com.ard.sample.wayline.service.IWaylineJobService;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -66,6 +69,12 @@
 
     @Autowired
     private IWaylineJobService waylineJobService;
+
+    @Autowired
+    private IWaylineTrajectoryService _waylineTrajectoryService;
+
+    @Autowired
+    private IWaylineJobHistoryService _waylineJobHistoryService;
 
     @Override
     @ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_FLIGHT_TASK_PROGRESS, outputChannel = ChannelName.OUTBOUND)
@@ -143,6 +152,9 @@
 //        if (eventsReceiver.getOutput().getProgress().getPercent() >= 95) {
 //            return;
 //        }
+
+
+
         String json = "";
         try {
             json = mapper.writeValueAsString(eventsReceiver);
@@ -150,6 +162,27 @@
             e.printStackTrace();
         }
         _dockWebSocketHandler.sendMessageToSubscribers(dockSn, MessageType.STATUS.getType(), json, "");
+
+        _waylineTrajectoryService.setList(dockSn,"1",json);
+
+        // 计划任务成功后,保存计划任务到历史记录
+        String status = eventsReceiver.getOutput().getStatus();
+        String jobId = eventsReceiver.getOutput().getExt().getFlightId();
+        if(status.equals("ok") && jobId != null) {
+            Optional<WaylineJobDTO> job = waylineJobService.getJobByJobId(jobId);
+            if(job.isPresent()) {
+                if (_waylineJobHistoryService.getJobByJobId(jobId).isPresent()) {
+                    return;
+                }
+                WaylineJobHistoryEntity waylineJobHistoryEntity = _waylineJobHistoryService.dto2Entity(job.get());
+                Optional<WaylineJobDTO> jobHistory = _waylineJobHistoryService.createWaylineJob(waylineJobHistoryEntity);
+                if(jobHistory.isPresent()) {
+                    log.info("任务执行成功,保存到历史记录。 {}", jobHistory);
+                }
+
+            }
+
+        }
     }
 
     /**
@@ -168,7 +201,7 @@
         if (Objects.isNull(jobIdValue)) {
             return;
         }
-        log.info("Check the timed tasks of the wayline. {}", jobIdValue);
+        log.info("检查 wayline 的定时任务。 {}", jobIdValue);
         // format: {workspace_id}:{dock_sn}:{job_id}
         String[] jobArr = String.valueOf(jobIdValue).split(RedisConst.DELIMITER);
         double time = RedisOpsUtils.zScore(RedisConst.WAYLINE_JOB_TIMED_EXECUTE, jobIdValue);
@@ -204,8 +237,9 @@
         long now = System.currentTimeMillis();
         int offset = 30_000;
 
-        // Expired tasks are deleted directly.
+        // 过期任务会直接删除。
         if (time < now - offset) {
+            log.info("定时任务超时,jobId: {}", jobArr[1]);
             RedisOpsUtils.zRemove(RedisConst.WAYLINE_JOB_TIMED_EXECUTE, jobIdValue);
             waylineJobService.updateJob(WaylineJobDTO.builder()
                     .jobId(jobArr[1])
@@ -218,11 +252,11 @@
 
         if (now <= time && time <= now + offset) {
             try {
-                waylineJobService.executeFlightTask(jobArr[2]);
+                waylineJobService.executeFlightTask(jobArr[1]);
             } catch (Exception e) {
-                log.info("The scheduled task delivery failed.");
+                log.info("计划中的任务交付失败了。jobId: {},异常信息:{}", jobArr[1], e.getMessage());
                 waylineJobService.updateJob(WaylineJobDTO.builder()
-                        .jobId(jobArr[2])
+                        .jobId(jobArr[1])
                         .status(WaylineJobStatusEnum.FAILED.getVal())
                         .executeTime(LocalDateTime.now())
                         .completedTime(LocalDateTime.now())

--
Gitblit v1.9.3