From 0ded60104a2c847732a095b50d21622ce8e7b363 Mon Sep 17 00:00:00 2001
From: zhaowenyu <35589726@qq.com>
Date: Thu, 08 Jan 2026 09:14:55 +0800
Subject: [PATCH] 2026-01-08 zwy 优化飞行轨迹数据存储。

---
 ard-sample/src/main/java/com/ard/sample/manage/model/dto/WaylineTrajectoryDTO.java            |    5 +-
 ard-sample/src/main/java/com/ard/sample/manage/service/impl/WaylineTrajectoryServiceImpl.java |  114 +++++++++++++++++++++++++++++++++++---------------------
 2 files changed, 74 insertions(+), 45 deletions(-)

diff --git a/ard-sample/src/main/java/com/ard/sample/manage/model/dto/WaylineTrajectoryDTO.java b/ard-sample/src/main/java/com/ard/sample/manage/model/dto/WaylineTrajectoryDTO.java
index 794cca6..ab93165 100644
--- a/ard-sample/src/main/java/com/ard/sample/manage/model/dto/WaylineTrajectoryDTO.java
+++ b/ard-sample/src/main/java/com/ard/sample/manage/model/dto/WaylineTrajectoryDTO.java
@@ -5,6 +5,7 @@
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Data
@@ -60,10 +61,10 @@
     /**
      * 飞行轨迹list
      * */
-    private List<String> trajectoryList;
+    private List<String> trajectoryList = new ArrayList<>();
 
     /**
      * 任务状态list
      * */
-    private List<String> taskList;
+    private List<String> taskList = new ArrayList<>();
 }
diff --git a/ard-sample/src/main/java/com/ard/sample/manage/service/impl/WaylineTrajectoryServiceImpl.java b/ard-sample/src/main/java/com/ard/sample/manage/service/impl/WaylineTrajectoryServiceImpl.java
index 2140577..5b2c5a1 100644
--- a/ard-sample/src/main/java/com/ard/sample/manage/service/impl/WaylineTrajectoryServiceImpl.java
+++ b/ard-sample/src/main/java/com/ard/sample/manage/service/impl/WaylineTrajectoryServiceImpl.java
@@ -49,7 +49,7 @@
     /**
      * 给数据加个进度
      */
-    private final ConcurrentHashMap<String, String> cacheProgress = new ConcurrentHashMap<>();
+//    private final ConcurrentHashMap<String, String> cacheProgress = new ConcurrentHashMap<>();
     /**
      * 分片保存阈值条数
      */
@@ -65,9 +65,9 @@
     public void setList(String sn, String type, String dataJson) {
         List<String> listTrajectory = cacheTrajectoryMap.computeIfAbsent(sn, k -> new ArrayList<>());
         List<String> listTask = cacheTaskMap.computeIfAbsent(sn, k -> new ArrayList<>());
-        String progress = cacheProgress.computeIfAbsent(sn, k -> "0");
+//        String progress = cacheProgress.computeIfAbsent(sn, k -> "0");
         // 取进度值,就为了判断ok一个任务的结束
-        Integer pro = Convert.toInt(cacheProgress.get(sn));
+//        Integer pro = Convert.toInt(cacheProgress.get(sn));
         // 取jobid、status字段值
         String jobId = "";
         String isOK = "";
@@ -81,6 +81,7 @@
             listTask.add(dataJson);
             log.info("任务状态数据添加到列表缓存,当前列表数量:{}", listTask.size());
         }
+        //region 先弃用
         // jobid、status字段赋值
         if (!listTask.isEmpty()) {
             String json = listTask.get(listTask.size() - 1);
@@ -93,26 +94,45 @@
             isOK = eventsReceiver.getOutput().getStatus();
 
             log.info("当前任务jobId:{},任务执行进度isOK:{}", jobId, isOK);
+
             } catch (Exception e) {
                 log.error("解析任务状态JSON失败: {}", e.getMessage());
                 log.error("JSON内容: {}", json);
             }
         }
-        if (listTrajectory.size() >= CHUNK_SIZE || listTask.size() >= CHUNK_SIZE) {
-            progress = Convert.toStr(pro + 1);
+//        listTrajectory.size() >= CHUNK_SIZE ||
+        // endregion
+        if (listTask.size() >= CHUNK_SIZE) {
+//            String json = listTask.get(listTask.size() - 1);
+//            log.info("当前任务记录最后一条数据:{}", json);
+//            try {
+//                EventsReceiver<WaylineTaskProgressReceiver> eventsReceiver = mapper.readValue(json,
+//                        new TypeReference<EventsReceiver<WaylineTaskProgressReceiver>>() {
+//                        });
+//                jobId = eventsReceiver.getOutput().getExt().getFlightId();
+//                isOK = eventsReceiver.getOutput().getStatus();
+//
+//                log.info("当前任务jobId:{},任务执行进度isOK:{}", jobId, isOK);
+//
+//            } catch (Exception e) {
+//                log.error("解析任务状态JSON失败: {}", e.getMessage());
+//                log.error("JSON内容: {}", json);
+//            }
+//            progress = Convert.toStr(pro + 1);
             // 分片保存
-            save(sn, jobId);
-            log.info("当前任务保存成功,jobId:{},进度:{}",jobId , progress);
+            save(sn, jobId, "0");
+            log.info("当前任务保存成功,jobId:{}, listTrajectory.size():{},listTask.size():{}", jobId, listTrajectory.size(), listTask.size());
+//            log.info("当前任务保存成功,jobId:{},进度:{}",jobId , progress);
         } else {
             // 判断任务状态json中的status字段,如果为OK,则保存数据,一条完整的航线数据结束。
             try {
                 if (isOK.equals("ok")) {
-                    progress = "ok";
+                    String progress = "ok";
                     if (getWaylineTrajectoryByProgress(jobId, progress)) {
                         log.info("当前任务已完成,不再保存数据!jobId:{},progress:{}", jobId, progress);
                         return;
                     }
-                    save(sn, jobId);
+                    save(sn, jobId, progress);
                     log.info("当前任务保存成功,jobId:{},进度:{}",jobId , progress);
                 }
             } catch (Exception e) {
@@ -122,42 +142,44 @@
     }
 
     @Async
-    public void save(String sn, String JobId) {
+    public void save(String sn, String JobId, String progress) {
         List<String> trajectoryList = cacheTrajectoryMap.get(sn);
         List<String> taskList = cacheTaskMap.get(sn);
-        String progress = cacheProgress.get(sn);
+//        String progress = cacheProgress.get(sn);
 
         if (trajectoryList.isEmpty() && taskList.isEmpty()) {
             return;
         }
         try {
+            log.info("开始保存轨迹点列表数据!jobId:{},轨迹数量:{},任务状态数量:{}", JobId, trajectoryList.size(), taskList.size());
             byte[] blobTrajectory = SerializeUtil.serialize(trajectoryList);
             byte[] blobTask = SerializeUtil.serialize(taskList);
 
             Optional<WaylineJobDTO> waylineJobDTO = _waylineJobService.getJobByJobId(JobId);
             WaylineTrajectoryEntity TrajectoryEntity = new WaylineTrajectoryEntity();
-            TrajectoryEntity.setJobId(JobId);
-            TrajectoryEntity.setName(waylineJobDTO.get().getJobName());
-            TrajectoryEntity.setFileId(waylineJobDTO.get().getFileId());
-            TrajectoryEntity.setFileName(waylineJobDTO.get().getFileName());
-            TrajectoryEntity.setDockSn(sn);
-            TrajectoryEntity.setProgress(progress);
-            TrajectoryEntity.setCreateTime(System.currentTimeMillis());
-            TrajectoryEntity.setUpdateTime(System.currentTimeMillis());
-            TrajectoryEntity.setTrajectoryList(blobTrajectory);
-            TrajectoryEntity.setTaskList(blobTask);
-            // 保存轨迹点列表数据
-            int i = _waylineTrajectoryMapper.insert(TrajectoryEntity);
-            if (i > 0) {
-                log.info("保存轨迹点列表数据成功!jobId:{}", JobId);
-                // 清空缓存
-                cacheTrajectoryMap.put(sn, new ArrayList<>());
-                cacheTaskMap.put(sn, new ArrayList<>());
-                if (progress.equals("ok")) {
-                    cacheProgress.put(sn, "0");
+            if(waylineJobDTO.isPresent()) {
+                TrajectoryEntity.setJobId(JobId);
+                TrajectoryEntity.setName(waylineJobDTO.get().getJobName());
+                TrajectoryEntity.setFileId(waylineJobDTO.get().getFileId());
+                TrajectoryEntity.setFileName(waylineJobDTO.get().getFileName());
+                TrajectoryEntity.setDockSn(sn);
+                TrajectoryEntity.setProgress(progress);
+                TrajectoryEntity.setCreateTime(System.currentTimeMillis());
+                TrajectoryEntity.setUpdateTime(System.currentTimeMillis());
+                TrajectoryEntity.setTrajectoryList(blobTrajectory);
+                TrajectoryEntity.setTaskList(blobTask);
+                // 保存轨迹点列表数据
+                int i = _waylineTrajectoryMapper.insert(TrajectoryEntity);
+                if (i > 0) {
+                    log.info("保存轨迹点列表数据成功!jobId:{}", JobId);
+                    // 清空缓存
+                    cacheTrajectoryMap.put(sn, new ArrayList<>());
+                    cacheTaskMap.put(sn, new ArrayList<>());
+//                if (progress.equals("ok")) {
+//                    cacheProgress.put(sn, "0");
+//                }
                 }
             }
-
         } catch (Exception e) {
             log.error("保存轨迹点列表数据失败!jobId:{}.{}", JobId, e.getMessage());
         }
@@ -195,23 +217,29 @@
         return !waylineTrajectoryEntityList.isEmpty();
     }
 
+
     public WaylineTrajectoryDTO TrajectoryEntityConvertToDTO(List<WaylineTrajectoryEntity> entity) {
         if (entity == null) {
             return null;
         }
         WaylineTrajectoryDTO dto = new WaylineTrajectoryDTO();
-        dto.setId(entity.get(0).getId());
-        dto.setJobId(entity.get(0).getJobId());
-        dto.setName(entity.get(0).getName());
-        dto.setFileId(entity.get(0).getFileId());
-        dto.setFileName(entity.get(0).getFileName());
-        dto.setDockSn(entity.get(0).getDockSn());
-        dto.setProgress(entity.get(0).getProgress());
-        dto.setCreateTime(entity.get(0).getCreateTime());
-        dto.setUpdateTime(entity.get(0).getUpdateTime());
-        for (WaylineTrajectoryEntity e : entity) {
-            dto.getTrajectoryList().addAll(SerializeUtil.deserialize(e.getTrajectoryList(), List.class));
-            dto.getTaskList().addAll(SerializeUtil.deserialize(e.getTaskList(), List.class));
+        try {
+            dto.setId(entity.get(0).getId());
+            dto.setJobId(entity.get(0).getJobId());
+            dto.setName(entity.get(0).getName());
+            dto.setFileId(entity.get(0).getFileId());
+            dto.setFileName(entity.get(0).getFileName());
+            dto.setDockSn(entity.get(0).getDockSn());
+            dto.setProgress(entity.get(0).getProgress());
+            dto.setCreateTime(entity.get(0).getCreateTime());
+            dto.setUpdateTime(entity.get(0).getUpdateTime());
+            for (WaylineTrajectoryEntity e : entity) {
+                dto.getTrajectoryList().addAll(SerializeUtil.deserialize(e.getTrajectoryList(), List.class));
+                dto.getTaskList().addAll(SerializeUtil.deserialize(e.getTaskList(), List.class));
+            }
+        }
+        catch (Exception e) {
+            log.error("获取任务id轨迹点列表数据失败!{}", e.getMessage());
         }
 
         return dto;

--
Gitblit v1.9.3