From 5c3396449048fa606940675103a7907e7bbd64ef Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Mon, 20 Oct 2025 13:47:35 +0800
Subject: [PATCH] 优化

---
 ard-work/src/main/java/com/ard/work/domain/cache/UavStateCache.java                      |   24 ++++++++----
 ard-work/src/main/java/com/ard/work/component/websocket/handler/UavStateManager.java     |    2 
 ard-work/src/main/java/com/ard/work/domain/dto/signal/SignalInfo.java                    |    2 +
 ard-work/src/main/java/com/ard/work/component/websocket/handler/UavAllManager.java       |    6 +-
 ard-work/src/main/java/com/ard/work/service/impl/TyServiceImpl.java                      |   12 +++---
 ard-work/src/main/java/com/ard/work/domain/dto/state/UavState.java                       |    6 +--
 ard-work/src/main/java/com/ard/work/aspect/UavControlAspect.java                         |    2 
 ard-work/src/main/java/com/ard/work/component/websocket/handler/UavTelemetryManager.java |    2 
 ard-work/src/main/java/com/ard/work/domain/cache/UavTelemetryDataCache.java              |   24 ++++++++---
 ard-work/src/main/java/com/ard/work/domain/dto/telemetry/TelemetryData.java              |    6 +--
 ard-work/src/main/java/com/ard/work/component/websocket/handler/UavSignalManager.java    |    2 
 ard-work/src/main/java/com/ard/work/domain/cache/UavSignalInfoCache.java                 |   24 ++++++++---
 12 files changed, 69 insertions(+), 43 deletions(-)

diff --git a/ard-work/src/main/java/com/ard/work/aspect/UavControlAspect.java b/ard-work/src/main/java/com/ard/work/aspect/UavControlAspect.java
index 5cd5cd4..f796aa1 100644
--- a/ard-work/src/main/java/com/ard/work/aspect/UavControlAspect.java
+++ b/ard-work/src/main/java/com/ard/work/aspect/UavControlAspect.java
@@ -70,7 +70,7 @@
         for (Object arg : args) {
             String boxSn = getBoxSn(arg);  // 调用之前实现的 getBoxSn 方法
             if (boxSn != null) {
-                TelemetryData uavTelemetryData = UavTelemetryDataCache.getUavTelemetryData(boxSn);
+                TelemetryData uavTelemetryData = UavTelemetryDataCache.get(boxSn);
                 if (uavTelemetryData == null) {
                     throw new ControlException("遥测数据异常,无法执行!");
                 }
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 1e74284..1e1e469 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
@@ -22,15 +22,15 @@
     @Override
     protected Map<String,Object> getData(String boxSn) {
         Map<String,Object> map=new HashMap<>();
-        UavState uavState = UavStateCache.getUavState(boxSn);
+        UavState uavState = UavStateCache.get(boxSn);
         if (uavState != null) {
             uavState.calculateFieldAngle();// 计算当前无人机的FieldAngle
         }
         map.put("boxSn", uavState.getBoxSn());
         map.put("state", uavState);
-        TelemetryData uavTelemetryData = UavTelemetryDataCache.getUavTelemetryData(boxSn);
+        TelemetryData uavTelemetryData = UavTelemetryDataCache.get(boxSn);
         map.put("telemetry", uavTelemetryData);
-        SignalInfo uavSignalInfo = UavSignalInfoCache.getUavSignalInfo(boxSn);
+        SignalInfo uavSignalInfo = UavSignalInfoCache.get(boxSn);
         map.put("signal", uavSignalInfo);
         // 获取当前控制飞行的用户ID
         Long flyUserId = uavControlService.getCurrentController(boxSn, "fly");
diff --git a/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavSignalManager.java b/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavSignalManager.java
index ab54db4..e860d9d 100644
--- a/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavSignalManager.java
+++ b/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavSignalManager.java
@@ -10,7 +10,7 @@
 
     @Override
     protected SignalInfo getData(String boxSn) {
-        return UavSignalInfoCache.getUavSignalInfo(boxSn);
+        return UavSignalInfoCache.get(boxSn);
     }
 
     @Override
diff --git a/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavStateManager.java b/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavStateManager.java
index b5aff26..e7d4e48 100644
--- a/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavStateManager.java
+++ b/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavStateManager.java
@@ -10,7 +10,7 @@
 
     @Override
     protected UavState getData(String boxSn) {
-        UavState uavState = UavStateCache.getUavState(boxSn);
+        UavState uavState = UavStateCache.get(boxSn);
         if (uavState != null) {
             uavState.calculateFieldAngle();// 计算当前无人机的FieldAngle
         }
diff --git a/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavTelemetryManager.java b/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavTelemetryManager.java
index f7a23e7..e83625d 100644
--- a/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavTelemetryManager.java
+++ b/ard-work/src/main/java/com/ard/work/component/websocket/handler/UavTelemetryManager.java
@@ -10,7 +10,7 @@
 
     @Override
     protected TelemetryData getData(String boxSn) {
-        return UavTelemetryDataCache.getUavTelemetryData(boxSn);
+        return UavTelemetryDataCache.get(boxSn);
     }
 
     @Override
diff --git a/ard-work/src/main/java/com/ard/work/domain/cache/UavSignalInfoCache.java b/ard-work/src/main/java/com/ard/work/domain/cache/UavSignalInfoCache.java
index 2e25c41..02b761e 100644
--- a/ard-work/src/main/java/com/ard/work/domain/cache/UavSignalInfoCache.java
+++ b/ard-work/src/main/java/com/ard/work/domain/cache/UavSignalInfoCache.java
@@ -1,6 +1,7 @@
 package com.ard.work.domain.cache;
 
 import com.ard.work.domain.dto.signal.SignalInfo;
+import com.ard.work.domain.dto.telemetry.TelemetryData;
 
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -13,20 +14,29 @@
 public class UavSignalInfoCache {
 
     // 使用 ConcurrentHashMap 来缓存无人机信道质量数据,key 是 boxSn(无人机序列号)
-    private static final ConcurrentHashMap<String, SignalInfo> uavSignalInfoCache = new ConcurrentHashMap<>();
+    private static final ConcurrentHashMap<String, SignalInfo> cache = new ConcurrentHashMap<>();
 
     // 存储无人机信道质量数据到缓存
-    public static void putUavSignalInfoCache(SignalInfo signalInfo) {
-        uavSignalInfoCache.put(signalInfo.getBoxSn(), signalInfo);
+    public static void put(SignalInfo signalInfo) {
+        cache.put(signalInfo.getBoxSn(), signalInfo);
     }
 
     // 从缓存中获取信道质量数据
-    public static SignalInfo getUavSignalInfo(String boxSn) {
-        return uavSignalInfoCache.get(boxSn);
+    public static SignalInfo get(String boxSn) {
+        return cache.get(boxSn);
     }
 
     // 删除缓存中的信道质量数据
-    public static void removeUavSignalInfo(String boxSn) {
-        uavSignalInfoCache.remove(boxSn);
+    public static void remove(String boxSn) {
+        cache.remove(boxSn);
+    }
+
+    // 定时任务使用:判断状遥测数据是否变化,但不更新缓存
+    public static boolean hasChanged(String boxSn, SignalInfo signalInfo) {
+        SignalInfo oldSignalInfo= cache.get(boxSn);
+        if (oldSignalInfo == null) {
+            return true; // 没有缓存,算作变化
+        }
+        return !oldSignalInfo.equals(signalInfo); // true = 有变化
     }
 }
diff --git a/ard-work/src/main/java/com/ard/work/domain/cache/UavStateCache.java b/ard-work/src/main/java/com/ard/work/domain/cache/UavStateCache.java
index ddd31c3..70349c4 100644
--- a/ard-work/src/main/java/com/ard/work/domain/cache/UavStateCache.java
+++ b/ard-work/src/main/java/com/ard/work/domain/cache/UavStateCache.java
@@ -1,6 +1,7 @@
 package com.ard.work.domain.cache;
 
 import com.ard.work.domain.dto.state.UavState;
+
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
@@ -12,20 +13,27 @@
 public class UavStateCache {
 
     // 使用 ConcurrentHashMap 来缓存无人机状态数据,key 是 boxSn(无人机序列号)
-    private static final ConcurrentHashMap<String, UavState> uavStateCache = new ConcurrentHashMap<>();
+    private static final ConcurrentHashMap<String, UavState> cache = new ConcurrentHashMap<>();
 
     // 存储无人机状态数据到缓存
-    public static void putUavState(UavState uavState) {
-        uavStateCache.put(uavState.getBoxSn(), uavState);
-    }
+    public static void put(UavState uavState) {cache.put(uavState.getBoxSn(), uavState);}
 
     // 从缓存中获取无人机状态数据
-    public static UavState getUavState(String boxSn) {
-        return uavStateCache.get(boxSn);
+    public static UavState get(String boxSn) {
+        return cache.get(boxSn);
     }
 
     // 删除缓存中的无人机状态数据
-    public static void removeUavState(String boxSn) {
-        uavStateCache.remove(boxSn);
+    public static void remove(String boxSn) {
+        cache.remove(boxSn);
+    }
+
+    // 定时任务使用:判断状态是否变化,但不更新缓存
+    public static boolean hasChanged(String boxSn, UavState newState) {
+        UavState oldState = cache.get(boxSn);
+        if (oldState == null) {
+            return true; // 没有缓存,算作变化
+        }
+        return !oldState.equals(newState); // true = 有变化
     }
 }
diff --git a/ard-work/src/main/java/com/ard/work/domain/cache/UavTelemetryDataCache.java b/ard-work/src/main/java/com/ard/work/domain/cache/UavTelemetryDataCache.java
index 65cb4ba..abb7da0 100644
--- a/ard-work/src/main/java/com/ard/work/domain/cache/UavTelemetryDataCache.java
+++ b/ard-work/src/main/java/com/ard/work/domain/cache/UavTelemetryDataCache.java
@@ -1,5 +1,6 @@
 package com.ard.work.domain.cache;
 
+import com.ard.work.domain.dto.state.UavState;
 import com.ard.work.domain.dto.telemetry.TelemetryData;
 
 import java.util.concurrent.ConcurrentHashMap;
@@ -13,20 +14,29 @@
 public class UavTelemetryDataCache {
 
     // 使用 ConcurrentHashMap 来缓存无人机遥测数据,key 是 boxSn(无人机序列号)
-    private static final ConcurrentHashMap<String, TelemetryData> uavTelemetryDataCache = new ConcurrentHashMap<>();
+    private static final ConcurrentHashMap<String, TelemetryData> cache = new ConcurrentHashMap<>();
 
     // 存储无人机遥测数据到缓存
-    public static void putUavTelemetryData(TelemetryData telemetryData) {
-        uavTelemetryDataCache.put(telemetryData.getBoxSn(), telemetryData);
+    public static void put(TelemetryData telemetryData) {
+        cache.put(telemetryData.getBoxSn(), telemetryData);
     }
 
     // 从缓存中获取无人机遥测数据
-    public static TelemetryData getUavTelemetryData(String boxSn) {
-        return uavTelemetryDataCache.get(boxSn);
+    public static TelemetryData get(String boxSn) {
+        return cache.get(boxSn);
     }
 
     // 删除缓存中的无人机遥测数据
-    public static void removeUavTelemetryData(String boxSn) {
-        uavTelemetryDataCache.remove(boxSn);
+    public static void remove(String boxSn) {
+        cache.remove(boxSn);
+    }
+
+    // 定时任务使用:判断状遥测数据是否变化,但不更新缓存
+    public static boolean hasChanged(String boxSn, TelemetryData telemetryData) {
+        TelemetryData oldTelemetryData= cache.get(boxSn);
+        if (oldTelemetryData == null) {
+            return true; // 没有缓存,算作变化
+        }
+        return !oldTelemetryData.equals(telemetryData); // true = 有变化
     }
 }
diff --git a/ard-work/src/main/java/com/ard/work/domain/dto/signal/SignalInfo.java b/ard-work/src/main/java/com/ard/work/domain/dto/signal/SignalInfo.java
index 8ee8ce2..d591b92 100644
--- a/ard-work/src/main/java/com/ard/work/domain/dto/signal/SignalInfo.java
+++ b/ard-work/src/main/java/com/ard/work/domain/dto/signal/SignalInfo.java
@@ -2,8 +2,10 @@
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 @Data
+@EqualsAndHashCode
 public class SignalInfo {
     private String mode;               // 入网模式: NR5G-SA, NR5G-NSA,LTE
     private String mcc;                // NR5G-SA, NR5G-NSA, LTE
diff --git a/ard-work/src/main/java/com/ard/work/domain/dto/state/UavState.java b/ard-work/src/main/java/com/ard/work/domain/dto/state/UavState.java
index 893f4bc..679f147 100644
--- a/ard-work/src/main/java/com/ard/work/domain/dto/state/UavState.java
+++ b/ard-work/src/main/java/com/ard/work/domain/dto/state/UavState.java
@@ -1,10 +1,7 @@
 package com.ard.work.domain.dto.state;
 
 import com.ard.work.util.CameraUtil;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
+import lombok.*;
 
 import java.util.List;
 
@@ -12,6 +9,7 @@
 @Builder
 @AllArgsConstructor
 @NoArgsConstructor
+@EqualsAndHashCode
 public class UavState {
 
     private FlightControllerState flightControllerState;  // 飞控状态
diff --git a/ard-work/src/main/java/com/ard/work/domain/dto/telemetry/TelemetryData.java b/ard-work/src/main/java/com/ard/work/domain/dto/telemetry/TelemetryData.java
index 5e0aa8d..8111ec1 100644
--- a/ard-work/src/main/java/com/ard/work/domain/dto/telemetry/TelemetryData.java
+++ b/ard-work/src/main/java/com/ard/work/domain/dto/telemetry/TelemetryData.java
@@ -1,14 +1,12 @@
 package com.ard.work.domain.dto.telemetry;
 
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
+import lombok.*;
 
 @Data
 @Builder
 @AllArgsConstructor
 @NoArgsConstructor
+@EqualsAndHashCode
 public class TelemetryData {
 
     private double lng;              // 经度
diff --git a/ard-work/src/main/java/com/ard/work/service/impl/TyServiceImpl.java b/ard-work/src/main/java/com/ard/work/service/impl/TyServiceImpl.java
index b230b18..130b9c9 100644
--- a/ard-work/src/main/java/com/ard/work/service/impl/TyServiceImpl.java
+++ b/ard-work/src/main/java/com/ard/work/service/impl/TyServiceImpl.java
@@ -481,7 +481,7 @@
      */
     @Override
     public UavState getUavState(String boxSn) {
-        return UavStateCache.getUavState(boxSn);
+        return UavStateCache.get(boxSn);
     }
 
     /**
@@ -489,7 +489,7 @@
      */
     @Override
     public TelemetryData getUavTelemetryData(String boxSn) {
-        return UavTelemetryDataCache.getUavTelemetryData(boxSn);
+        return UavTelemetryDataCache.get(boxSn);
     }
 
     /**
@@ -497,7 +497,7 @@
      */
     @Override
     public SignalInfo getSignalInfo(String boxSn) {
-        return UavSignalInfoCache.getUavSignalInfo(boxSn);
+        return UavSignalInfoCache.get(boxSn);
     }
 
     /**
@@ -700,14 +700,14 @@
             case (byte) 0xA8:
                 // 处理无人机状态消息
                 UavStateCmd uavStateCmd = (UavStateCmd) tyCommand;
-                UavStateCache.putUavState(uavStateCmd.getUavState());
+                UavStateCache.put(uavStateCmd.getUavState());
                 //logPrint("无人机状态", uavStateCmd.getUavState().getBoxSn());
                 // WebSocketUtil.sendMessageAll(uavStateCmd.getUavState());
                 break;
             case (byte) 0xA9:
                 // 处理无人机遥测消息
                 UavTelemetryDataCmd uavTelemetryDataCmd = (UavTelemetryDataCmd) tyCommand;
-                UavTelemetryDataCache.putUavTelemetryData(uavTelemetryDataCmd.getTelemetryData());
+                UavTelemetryDataCache.put(uavTelemetryDataCmd.getTelemetryData());
                 //logPrint("无人机遥测", uavTelemetryDataCmd.getTelemetryData().getBoxSn());
                 //WebSocketUtil.sendMessageAll(uavTelemetryDataCmd.getTelemetryData());
                 break;
@@ -715,7 +715,7 @@
             case (byte) 0x0C:
                 // 处理无人机信道质量数据
                 SignalInfoCmd signalInfoCmd = (SignalInfoCmd) tyCommand;
-                UavSignalInfoCache.putUavSignalInfoCache(signalInfoCmd.getSignalInfo());
+                UavSignalInfoCache.put(signalInfoCmd.getSignalInfo());
                 //logPrint("无人机信道质量", signalInfoCmd.getSignalInfo().getBoxSn());
                 break;
             case (byte) 0xD1:

--
Gitblit v1.9.3