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 ef5c0094..c3b90a8e 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 @@ -46,6 +46,10 @@ public class D331RtcmMessageExecutor implements Executor private BeidouClient beidouClient; @Autowired private DataPersistService dataPersistService; + + // 添加一个成员变量用于追踪每个测站最后一次转发D300数据的时间 + private final Map lastD300ForwardTimeMap = new ConcurrentHashMap<>(); + private static final long D300_FORWARD_INTERVAL = 10000; // 10秒,单位毫秒 @Override public Void execute(D331RtcmMessage message) { @@ -117,16 +121,59 @@ public class D331RtcmMessageExecutor implements Executor deviceChannel = OnlineChannels.INSTANCE.getConfigChannel(deviceId); } - if(deviceChannel != null && deviceChannel.isOnline()) { - if (logger.isDebugEnabled()) { - logger.debug("forward d331 rtcm from {} to device {}", id, deviceId); + // 读取数据库中model字段,判断基站类型 + Short baseStationModel = deviceBs.getModel(); + if (baseStationModel == 1) { + // 基站类型为1,正常执行 + if(deviceChannel != null && deviceChannel.isOnline()) { + if (logger.isDebugEnabled()) { + logger.debug("forward d331 rtcm from {} to device {}", id, deviceId); + } + ByteBuf buf = Unpooled.buffer(); + buf.writeBytes(forwardBytes); + deviceChannel.writeAndFlush(buf); } - if (deviceId.startsWith("2307")) { - forwardBytes[2] = (byte) (forwardBytes[2] & 0x07);//兼容不带序号的测站 + } else if (baseStationModel == 0) { + // 基站类型为0,判断测站类型 + if(device.getModel() == 0){ + // 测站类型为0,正常执行 + if(deviceId.startsWith("2307")){ + // 处理2307型号的测站 + forwardBytes[2] = (byte) (forwardBytes[2] & 0x07);//兼容不带序号的测站 + } + // 对所有测站类型为0的设备执行转发 + if(deviceChannel != null && deviceChannel.isOnline()) { + if (logger.isDebugEnabled()) { + logger.debug("forward d331 rtcm from {} to device {}", id, deviceId); + } + ByteBuf buf = Unpooled.buffer(); + buf.writeBytes(forwardBytes); + deviceChannel.writeAndFlush(buf); + } + } + else if(device.getModel() == 1){ + // 在转发的数据后添加特定字符串,且频率为5秒一次 + if(deviceChannel != null && deviceChannel.isOnline()) { + if (logger.isDebugEnabled()) { + logger.debug("forward d331 rtcm from {} to device {}", id, deviceId); + } + ByteBuf buf = Unpooled.buffer(); + buf.writeBytes(forwardBytes); + + // 检查是否满足10秒转发间隔,只有满足条件时才添加D300字符串 + long currentTime = System.currentTimeMillis(); + Long lastForwardTime = lastD300ForwardTimeMap.getOrDefault(deviceId, 0L); + + if(currentTime - lastForwardTime >= D300_FORWARD_INTERVAL) { + // 每10秒添加一次D300字符串 + buf.writeBytes("D300133ED67C033A96442E358C8B47FE2B05CD2770B9E41915".getBytes()); + // 更新最后转发时间 + lastD300ForwardTimeMap.put(deviceId, currentTime); + } + + deviceChannel.writeAndFlush(buf); + } } - ByteBuf buf = Unpooled.buffer(); - buf.writeBytes(forwardBytes); - deviceChannel.writeAndFlush(buf); } } }