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