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/service/impl/WaylineTrajectoryServiceImpl.java | 122 ++++++++++++++++++++++++++--------------
1 files changed, 78 insertions(+), 44 deletions(-)
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 63eb534..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,32 +81,58 @@
listTask.add(dataJson);
log.info("任务状态数据添加到列表缓存,当前列表数量:{}", listTask.size());
}
+ //region 先弃用
// jobid、status字段赋值
if (!listTask.isEmpty()) {
String json = listTask.get(listTask.size() - 1);
- EventsReceiver<WaylineTaskProgressReceiver> eventsReceiver = mapper.convertValue(json,
+ 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);
+ }
}
- 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) {
@@ -116,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());
}
@@ -189,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