liusuyi
2025-12-08 ed42f424fb730b0ae4dff3a79da7af4a681a207b
优化
1 files modified
64 ■■■■■ changed files
ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java 64 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java
@@ -284,42 +284,40 @@
     */
    @Scheduled(fixedRate = 1000 * 5)
    public void syncBoxInfo() {
        ArdServerInfo ardServerInfo=new ArdServerInfo();
        ArdServerInfo ardServerInfo = new ArdServerInfo();
        ardServerInfo.setUseDataScope(false);
        List<ArdServerInfo> servers = ardServerInfoService.selectArdServerInfoList(ardServerInfo);
        servers.stream()
                .filter(server -> server.getServerStatus().equals("1"))
                .forEach(server -> {
                            ArdDroneInfo droneInfo = new ArdDroneInfo();
                            droneInfo.setServerId(server.getId());
                            droneInfo.setUseDataScope(false);
                            List<ArdDroneInfo> localList = selectArdDroneList(droneInfo);
                            Map<String, ArdDroneInfo> localMap = localList.stream()
                                    .collect(Collectors.toMap(ArdDroneInfo::getBoxSn, drone -> drone));
                            List<BoxInfoReceiver> boxList = tyService.getBoxList(server.getId());
                            if (boxList == null) {
                                updateArdDrone(ArdDroneInfo.builder().serverId(server.getId()).onLine(0).build());
                                return;
                            }
                            boxList.forEach(remote -> {
                                String boxSn = remote.getBoxSn();
        servers.forEach(server -> {
            ArdDroneInfo droneInfo = new ArdDroneInfo();
            droneInfo.setServerId(server.getId());
            droneInfo.setUseDataScope(false);
            List<ArdDroneInfo> localList = selectArdDroneList(droneInfo);
            Map<String, ArdDroneInfo> localMap = localList.stream()
                    .collect(Collectors.toMap(ArdDroneInfo::getBoxSn, drone -> drone));
            List<BoxInfoReceiver> boxList = tyService.getBoxList(server.getId());
            if (boxList == null) {
                updateArdDrone(ArdDroneInfo.builder().serverId(server.getId()).onLine(0).build());
                return;
            }
            boxList.forEach(remote -> {
                String boxSn = remote.getBoxSn();
                                // ✅ 维护在线状态缓存
                                // 只有在线的无人机才存 Redis
                                String redisKey = CacheConstants.UAV_ONLINE_KEY + boxSn;
                                if (remote.getOnLine() == 1) {
                                    redisCache.setCacheObject(redisKey, remote, 30, TimeUnit.SECONDS);
                                } else {
                                    redisCache.deleteObject(CacheConstants.UAV_ONLINE_KEY + boxSn);
                                }
                                // 数据库同步
                                ArdDroneInfo local = localMap.get(boxSn);
                                if (local != null && !local.isSameAs(remote)) {
                                    updateChangedAttributes(local, remote);
                                    updateArdDrone(local);
                                }
                            });
                        });
                // ✅ 维护在线状态缓存
                // 只有在线的无人机才存 Redis
                String redisKey = CacheConstants.UAV_ONLINE_KEY + boxSn;
                if (remote.getOnLine() == 1) {
                    redisCache.setCacheObject(redisKey, remote, 30, TimeUnit.SECONDS);
                } else {
                    redisCache.deleteObject(CacheConstants.UAV_ONLINE_KEY + boxSn);
                }
                // 数据库同步
                ArdDroneInfo local = localMap.get(boxSn);
                if (local != null && !local.isSameAs(remote)) {
                    updateChangedAttributes(local, remote);
                    updateArdDrone(local);
                }
            });
        });
    }
    // 更新变化的属性