From f789cb13684b73ad38c7a6b1720e49500cfec822 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Tue, 25 Nov 2025 16:33:21 +0800
Subject: [PATCH] websocket增加wayline航线信息
---
ard-work/src/main/java/com/ard/work/component/websocket/handler/UavAllManager.java | 8 ++++
ard-work/src/main/java/com/ard/work/domain/dto/wayline/WaylineInfo.java | 19 +++++++++
ard-work/src/main/java/com/ard/work/domain/cache/UavWaylineCache.java | 42 +++++++++++++++++++++
3 files changed, 69 insertions(+), 0 deletions(-)
diff --git a/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavAllManager.java b/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavAllManager.java
index 72c2fe7..ecfee04 100644
--- a/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavAllManager.java
+++ b/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavAllManager.java
@@ -6,9 +6,11 @@
import com.ard.work.domain.cache.UavSignalInfoCache;
import com.ard.work.domain.cache.UavStateCache;
import com.ard.work.domain.cache.UavTelemetryDataCache;
+import com.ard.work.domain.cache.UavWaylineCache;
import com.ard.work.domain.dto.signal.SignalInfo;
import com.ard.work.domain.dto.state.UavState;
import com.ard.work.domain.dto.telemetry.TelemetryData;
+import com.ard.work.domain.dto.wayline.WaylineInfo;
import com.ard.work.service.control.UavControlService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -33,10 +35,16 @@
log.debug("获取无人机所有数据");
Map<String, Object> map = new HashMap<>();
map.put("boxSn", boxSn);
+
+ WaylineInfo waylineInfo = UavWaylineCache.get(boxSn);
+ map.put("wayline", waylineInfo);
+
UavState uavState = UavStateCache.get(boxSn);
map.put("state", uavState);
+
TelemetryData uavTelemetryData = UavTelemetryDataCache.get(boxSn);
map.put("telemetry", uavTelemetryData);
+
SignalInfo uavSignalInfo = UavSignalInfoCache.get(boxSn);
map.put("signal", uavSignalInfo);
// 获取当前控制飞行的用户ID
diff --git a/ard-work/src/main/java/com/ard/work/domain/cache/UavWaylineCache.java b/ard-work/src/main/java/com/ard/work/domain/cache/UavWaylineCache.java
new file mode 100644
index 0000000..0c8fefe
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/work/domain/cache/UavWaylineCache.java
@@ -0,0 +1,42 @@
+package com.ard.work.domain.cache;
+
+import com.ard.work.domain.dto.signal.SignalInfo;
+import com.ard.work.domain.dto.wayline.WaylineInfo;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 无人机当前航线缓存
+ *
+ * @author 刘苏义
+ * @date 2024/10/24 8:55
+ */
+public class UavWaylineCache {
+
+ // 使用 ConcurrentHashMap 来缓存无人机信道质量数据,key 是 boxSn(无人机序列号)
+ private static final ConcurrentHashMap<String, WaylineInfo> cache = new ConcurrentHashMap<>();
+
+ // 存储无人机信道质量数据到缓存
+ public static void put(WaylineInfo waylineInfo) {
+ cache.put(waylineInfo.getBoxSn(), waylineInfo);
+ }
+
+ // 从缓存中获取信道质量数据
+ public static WaylineInfo get(String boxSn) {
+ return cache.get(boxSn);
+ }
+
+ // 删除缓存中的信道质量数据
+ public static void remove(String boxSn) {
+ cache.remove(boxSn);
+ }
+
+ // 定时任务使用:判断状遥测数据是否变化,但不更新缓存
+ public static boolean hasChanged(String boxSn, WaylineInfo waylineInfo) {
+ WaylineInfo oldWaylineInfo= cache.get(boxSn);
+ if (oldWaylineInfo == null) {
+ return true; // 没有缓存,算作变化
+ }
+ return !oldWaylineInfo.equals(waylineInfo); // true = 有变化
+ }
+}
diff --git a/ard-work/src/main/java/com/ard/work/domain/dto/wayline/WaylineInfo.java b/ard-work/src/main/java/com/ard/work/domain/dto/wayline/WaylineInfo.java
new file mode 100644
index 0000000..e1f9f93
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/work/domain/dto/wayline/WaylineInfo.java
@@ -0,0 +1,19 @@
+package com.ard.work.domain.dto.wayline;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * Description: 当前航线信息
+ * Author: lsy
+ * Date: 2025年11月25日16:29
+ **/
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class WaylineInfo {
+ private String boxSn;
+ private String waylineId;
+}
--
Gitblit v1.9.3