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 57777cdb..e3924103 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 @@ -14,7 +14,6 @@ import com.imdroid.sideslope.server.DeviceChannel; import com.imdroid.sideslope.server.OnlineChannels; import com.imdroid.sideslope.service.DataPersistService; import com.imdroid.sideslope.bd.RtcmGgaUtil; -//import com.imdroid.common.util.RtcmGgaUtil; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import org.slf4j.Logger; @@ -73,18 +72,35 @@ public class D331RtcmMessageExecutor implements Executor for (Device device : allDevices) { if (device.getOpMode() != GnssDevice.OP_MODE_USE) continue; String deviceId = device.getDeviceId(); + System.out.println(deviceId); // 检查该设备是否应该接收此基站的数据 String primaryBaseId = device.getParentId(); String backupBaseId = device.getParentId1(); + //System.out.println(primaryBaseId); + //System.out.println(backupBaseId); // 如果当前基站是该设备的备选基站,需要检查主基站是否离线 if (id.equals(backupBaseId)) { + byte[] modifyData = forwardBytes.clone(); Device primaryBase = deviceService.findByDeviceId(primaryBaseId); // 如果主基站仍然在线,则跳过备选基站的数据 if (primaryBase != null && isBaseStationOnline(primaryBase)) { continue; } + else { + String hexPrimaryBase = String.format("%06x",Integer.parseInt(primaryBaseId)); + System.out.println(hexPrimaryBase); + + modifyData[5] = (byte) Integer.parseInt(hexPrimaryBase.substring(0,2),16); + modifyData[6] = (byte) Integer.parseInt(hexPrimaryBase.substring(2,4),16); + modifyData[7] = (byte) Integer.parseInt(hexPrimaryBase.substring(4,6),16); + + forwardBytes = modifyData; + + // 打印修改后的完整数据(16进制形式) + //logger.info("Modified D331 data (HEX): {}", ByteUtil.bytesToHexString(forwardBytes)); + } } // 获取设备通道并发送数据 @@ -174,8 +190,8 @@ public class D331RtcmMessageExecutor implements Executor // 提取RTCM数据并发送到NtripServer,使用设备ID作为挂载点 Optional.ofNullable(RtcmGgaUtil.getRtcms(hexData)) .ifPresent(rtcm -> { - System.out.println("挂载点: " + mountpoint); - System.out.println("RTCM数据: " + rtcm); + //System.out.println("挂载点: " + mountpoint); + //System.out.println("RTCM数据: " + rtcm); UdpNtripServer.send(mountpoint, rtcm); }); } catch (Exception e) { @@ -199,7 +215,7 @@ public class D331RtcmMessageExecutor implements Executor LocalDateTime now =LocalDateTime.now(); return baseStation.getLastRxTime() !=null && - baseStation.getLastRxTime().isAfter(now.minusMinutes(30)); + baseStation.getLastRxTime().isAfter(now.minusMinutes(10)); }