liusuyi
2025-10-20 5c3396449048fa606940675103a7907e7bbd64ef
优化
12 files modified
112 ■■■■■ changed files
ard-work/src/main/java/com/ard/work/aspect/UavControlAspect.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/component/websocket/handler/UavAllManager.java 6 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/component/websocket/handler/UavSignalManager.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/component/websocket/handler/UavStateManager.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/component/websocket/handler/UavTelemetryManager.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/domain/cache/UavSignalInfoCache.java 24 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/domain/cache/UavStateCache.java 24 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/domain/cache/UavTelemetryDataCache.java 24 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/domain/dto/signal/SignalInfo.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/domain/dto/state/UavState.java 6 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/domain/dto/telemetry/TelemetryData.java 6 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/service/impl/TyServiceImpl.java 12 ●●●●● patch | view | raw | blame | history
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("遥测数据异常,无法执行!");
                }
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");
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
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
        }
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
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 = 有变化
    }
}
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 = 有变化
    }
}
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 = 有变化
    }
}
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
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;  // 飞控状态
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;              // 经度
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: