Compare commits

..

No commits in common. "afdcaddf68e67be9e08dc5f21dbd835debacd06a" and "68e9f63929fce404d80618f53047f1cf1a8a9d7d" have entirely different histories.

View File

@ -49,6 +49,9 @@ public class D331RtcmMessageExecutor implements Executor<D331RtcmMessage, Void>
UdpNtripServer ntripServer;
@Autowired
private GNSSDataCalcService gnssCalcService;
// 指定仅对该基站启用1005插入功能请将值替换为目标基站ID
private static final String TARGET_BASE_STATION_ID_FOR_1005 = "6541918";
// 添加一个成员变量用于追踪每个测站最后一次转发D300数据的时间
private final Map<String, Long> lastD300ForwardTimeMap = new ConcurrentHashMap<>();
@ -180,15 +183,34 @@ public class D331RtcmMessageExecutor implements Executor<D331RtcmMessage, Void>
if (logger.isDebugEnabled()) {
logger.debug("forward d331 rtcm from {} to device {}", deviceBs.getDeviceId(), deviceId);
}
ByteBuf buf = Unpooled.buffer();
buf.writeBytes(forwardBytes);
//推送策略F9P基站505兼容博通510推送
// 为每个设备生成独立的数据副本确保按需修改如2307不影响其他设备
byte[] perDeviceBytes = forwardBytes;
if(deviceId.startsWith("2307")){
// 处理2307型号的测站兼容不带序号的测站修改应发生在写入 ByteBuf 之前
perDeviceBytes = forwardBytes.clone();
perDeviceBytes[2] = (byte) (perDeviceBytes[2] & 0x07);
}
ByteBuf buf = Unpooled.buffer();
buf.writeBytes(perDeviceBytes);
// 推送策略
// 1) 保持原 F9P505 博通510兼容逻辑不变
// 2) 仅对指定基站 ID 追加 1005不影响其它基站
boolean needInsert1005 = false;
if ((deviceBs.getModel()==null || deviceBs.getModel() == GnssDevice.MODEL_G505) &&
(device.getModel()!=null && device.getModel()==GnssDevice.MODEL_G510)){
(device.getModel()!=null && device.getModel()==GnssDevice.MODEL_G510)) {
needInsert1005 = true; // 原兼容逻辑
}
if (TARGET_BASE_STATION_ID_FOR_1005.equals(deviceBs.getDeviceId())) {
needInsert1005 = true; // 仅特定基站额外插入
}
if (needInsert1005) {
buf = insert1005(deviceBs, deviceId, buf);
}
// 实际发送到设备通道
deviceChannel.writeAndFlush(buf);
}
}
@ -204,7 +226,9 @@ public class D331RtcmMessageExecutor implements Executor<D331RtcmMessage, Void>
//logger.info("Adding D300 string for device: {}", deviceId);
// 获取当前buf中的数据
byte[] originalData = buf.array();
int readableLen = buf.readableBytes();
byte[] originalData = new byte[readableLen];
buf.getBytes(0, originalData);
String originalHex = ByteUtil.bytesToHexString(originalData);
// 找到D300和D301的位置