| | |
| | | */ |
| | | @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(); |
| | | for (ArdServerInfo server : servers) { |
| | | 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()); |
| | | continue; |
| | | } |
| | | 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); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | | // 更新变化的属性 |