From ab8da122937f548f56b4b6efafc1fc4ca58bca90 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Mon, 08 Dec 2025 13:49:33 +0800
Subject: [PATCH] 优化

---
 ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java |   45 ++++++++++++++++++++++++++++-----------------
 1 files changed, 28 insertions(+), 17 deletions(-)

diff --git a/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java b/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java
index c4366ea..cdc212c 100644
--- a/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java
+++ b/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java
@@ -287,7 +287,7 @@
         ArdServerInfo ardServerInfo = new ArdServerInfo();
         ardServerInfo.setUseDataScope(false);
         List<ArdServerInfo> servers = ardServerInfoService.selectArdServerInfoList(ardServerInfo);
-        servers.forEach(server -> {
+        for (ArdServerInfo server : servers) {
             ArdDroneInfo droneInfo = new ArdDroneInfo();
             droneInfo.setServerId(server.getId());
             droneInfo.setUseDataScope(false);
@@ -297,43 +297,54 @@
             List<BoxInfoReceiver> boxList = tyService.getBoxList(server.getId());
             if (boxList == null) {
                 updateArdDrone(ArdDroneInfo.builder().serverId(server.getId()).onLine(0).build());
-                return;
+                continue;
             }
-            boxList.forEach(remote -> {
+            for (BoxInfoReceiver remote : boxList) {
                 String boxSn = remote.getBoxSn();
-
-                // ✅ 维护在线状态缓存
-                // 只有在线的无人机才存 Redis
                 String redisKey = CacheConstants.UAV_ONLINE_KEY + boxSn;
+
+                // 只处理在线的 Redis
                 if (remote.getOnLine() == 1) {
                     redisCache.setCacheObject(redisKey, remote, 30, TimeUnit.SECONDS);
                 } else {
-                    redisCache.deleteObject(CacheConstants.UAV_ONLINE_KEY + boxSn);
+                    redisCache.deleteObject(redisKey);
                 }
+
                 // 数据库同步
                 ArdDroneInfo local = localMap.get(boxSn);
-                if (local != null && !local.isSameAs(remote)) {
-                    updateChangedAttributes(local, remote);
-                    updateArdDrone(local);
-                }
-            });
-        });
-    }
+                if (local == null) continue;
 
-    // 更新变化的属性
-    private void updateChangedAttributes(ArdDroneInfo localBoxInfo, BoxInfoReceiver remoteArdDrone) {
+                if (updateChangedAttributes(local, remote)) {
+                    updateArdDrone(local); // 只有真的有变化才更新数据库
+                }
+            }
+        }
+    }
+    /**
+     * 更新 localBoxInfo 的字段,如果有变化返回 true,否则返回 false
+     */
+    private boolean updateChangedAttributes(ArdDroneInfo localBoxInfo, BoxInfoReceiver remoteArdDrone) {
+        boolean changed = false;
+
         if (!Objects.equals(localBoxInfo.getBoxName(), remoteArdDrone.getBoxName())) {
             localBoxInfo.setBoxName(remoteArdDrone.getBoxName());
+            changed = true;
         }
         if (!Objects.equals(localBoxInfo.getBoxVersion(), remoteArdDrone.getBoxVersion())) {
             localBoxInfo.setBoxVersion(remoteArdDrone.getBoxVersion());
+            changed = true;
         }
         if (!Objects.equals(localBoxInfo.getLastTaskId(), remoteArdDrone.getLastTaskId())) {
             localBoxInfo.setLastTaskId(remoteArdDrone.getLastTaskId());
+            changed = true;
         }
         if (!Objects.equals(localBoxInfo.getOnLine(), remoteArdDrone.getOnLine())) {
             localBoxInfo.setOnLine(remoteArdDrone.getOnLine());
+            changed = true;
         }
-        // 更新其他属性
+
+        // TODO: 更新其他属性时,如果变化也设置 changed = true
+
+        return changed;
     }
 }

--
Gitblit v1.9.3