diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java index 36c01c88..ef5c0094 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java @@ -25,7 +25,9 @@ import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; /** @@ -37,6 +39,7 @@ public class D331RtcmMessageExecutor implements Executor private final Logger logger = LoggerFactory.getLogger(this.getClass()); + private static final Map deviceBackupStatus = new ConcurrentHashMap<>(); @Resource(name = "local") private DeviceService deviceService; @Autowired @@ -83,11 +86,18 @@ public class D331RtcmMessageExecutor implements Executor Device primaryBase = deviceService.findByDeviceId(primaryBaseId); // 如果主基站仍然在线,则跳过备选基站的数据 if (primaryBase != null && isBaseStationOnline(primaryBase)) { + if(deviceBackupStatus.remove(deviceId) != null){ + logger.info("设备 {} 从备用基站 {} 切换回主基站 {}", + deviceId, id, primaryBaseId); + } continue; } else { String hexPrimaryBase = String.format("%06x",Integer.parseInt(primaryBaseId)); - System.out.println(hexPrimaryBase); + if(deviceBackupStatus.putIfAbsent(deviceId,true) == null){ + logger.info("设备 {} 从主基站 {} 切换到备用基站 {}", + deviceId, primaryBaseId, id); + } modifyData[5] = (byte) Integer.parseInt(hexPrimaryBase.substring(0,2),16); modifyData[6] = (byte) Integer.parseInt(hexPrimaryBase.substring(2,4),16);