From 9b4f7f434cb3a41dd1bbdb8d11da446c21e80234 Mon Sep 17 00:00:00 2001 From: weidong Date: Sat, 29 Mar 2025 23:47:55 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9ICCID=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E7=9A=84bug=202=E3=80=81=E5=A2=9E=E5=8A=A0=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E4=B8=80=E8=87=B4=E6=80=A7=E6=A3=80=E6=9F=A5=E7=9A=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../imdroid/secapi/client/BeidouClient.java | 3 +- .../executor/D331RtcmMessageExecutor.java | 2 +- .../executor/D341LocationMessageExecutor.java | 2 +- .../D3F0SelfCheckMessageExecutor.java | 29 ++-------------- .../beidou/controller/APIController.java | 34 +++++++++++++++++-- 5 files changed, 37 insertions(+), 33 deletions(-) diff --git a/sec-api/src/main/java/com/imdroid/secapi/client/BeidouClient.java b/sec-api/src/main/java/com/imdroid/secapi/client/BeidouClient.java index 13238a03..8b1880be 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/client/BeidouClient.java +++ b/sec-api/src/main/java/com/imdroid/secapi/client/BeidouClient.java @@ -20,7 +20,8 @@ public interface BeidouClient { @PostMapping("/device_active") String onDeviceActive(@RequestParam(name = "deviceId") String deviceId, - @RequestParam(name = "tenantId") Integer tenantId); + @RequestParam(name = "tenantId") Integer tenantId, + @RequestParam(name = "lastOnlineTime") LocalDateTime lastOnlineTime); @PostMapping("/device_stop") String onDeviceStop(@RequestParam(name = "deviceId") String deviceId, 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 8d643ea0..e5153aa5 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 @@ -109,7 +109,7 @@ public class D331RtcmMessageExecutor implements Executor ThreadManager.getFixedThreadPool().submit(() -> { // 通知上线 try { - beidouClient.onDeviceActive(deviceBs.getDeviceId(), deviceBs.getTenantId()); + beidouClient.onDeviceActive(deviceBs.getDeviceId(), deviceBs.getTenantId(),lastCycleDevice.getLastRxTime()); } catch (Exception e) { logger.error(e.toString()); } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java index 45f8fa91..dae99380 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java @@ -64,7 +64,7 @@ public class D341LocationMessageExecutor implements Executor { // 通知上线 try { - beidouClient.onDeviceActive(device.getDeviceId(), device.getTenantId()); + beidouClient.onDeviceActive(device.getDeviceId(), device.getTenantId(),lastCycleDevice.getLastRxTime()); } catch (Exception e) { } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java index 83ec82e6..c37c7606 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java @@ -41,8 +41,6 @@ public class D3F0SelfCheckMessageExecutor implements Executor { - // 检查是否需要更新设备的 ICCID - checkAndAskICCID(device); // 检查是否需要对设备的F9P进行冷启动操作 if(device.getDeviceType() == Device.DEVICE_ROVER){ if(device.getModel() == GnssDevice.MODEL_G505){ @@ -86,7 +82,8 @@ public class D3F0SelfCheckMessageExecutor implements Executor0 &&device.getAbnormalD341Num()>10){ if(isBaseStationFwd(device)) startBTResetTask(device); diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/APIController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/APIController.java index 723c1b39..f97f3d4d 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/APIController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/APIController.java @@ -14,6 +14,7 @@ import java.time.LocalDateTime; @Controller public class APIController extends BasicController{ + final String getWorkCycleCmd = "d3120005009034D301"; SimpleDateFormat dateFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); @Autowired RtcmClient rtcmClient; @@ -46,6 +47,9 @@ public class APIController extends BasicController{ deviceMapper.updateById(device); } } + else if(msgType == 0xd312){ + // 一致性检查 + } // 保存, debug 01 02上来的原始数据不保存 if(msgType != 0xd313 || configAck.length()<100) { @@ -80,7 +84,7 @@ public class APIController extends BasicController{ @PostMapping(value = "/api/device_online") @ResponseBody public String onLine(String deviceId, Integer tenantId, LocalDateTime lastOnlineTime) { - onDeviceActive(deviceId,tenantId); + onDeviceActive(deviceId,tenantId,lastOnlineTime); // 检查是否自动补传 GnssDevice device = deviceMapper.queryByDeviceId(deviceId); @@ -114,11 +118,13 @@ public class APIController extends BasicController{ /****** device active *******/ @PostMapping(value = "/api/device_active") @ResponseBody - public String onDeviceActive(String deviceId, Integer tenantId) { + public String onDeviceActive(String deviceId, Integer tenantId, LocalDateTime lastOnlineTime) { // 检查有没有待配置的参数 GnssDevice device = deviceMapper.queryByDeviceId(deviceId); - if(device!=null && !device.getSyn()){ + if(device == null) return null; + + if(!device.getSyn()){ GnssGroup gnssGroup = groupMapper.selectById(device.getGroup_id()); if(gnssGroup != null){ String config = gnssGroup.getConfigCmd(device); @@ -145,9 +151,31 @@ public class APIController extends BasicController{ saveMsg(deviceId, tenantId,cacheCmd.getMsgtype(), cacheCmd.getCmd(), true); } + // 检查参数一致性 + if(lastOnlineTime!=null){ + if(lastOnlineTime.isBefore(LocalDateTime.now().minusMinutes(50))){ + rtcmClient.config(deviceId, getWorkCycleCmd); + } + } + + // 检查iccid + checkAndAskICCID(device); + return null; } + void checkAndAskICCID(GnssDevice device){ + if(device.getIccid() == null) { + String sendCmd = "AT+ICCID"; + int msgType = 0xD310 + 10; // DTU + short len = (short) (sendCmd.length() + 5); + sendCmd = Integer.toHexString(msgType) + HexUtil.Short2HexString(len) + + HexUtil.Int2HexString(Integer.parseInt(device.getDeviceid())) + + "01" + HexUtil.String2HexString(sendCmd); + rtcmClient.config(device.getDeviceid(), sendCmd); + } + } + /****** device stop *******/ @PostMapping(value = "/api/device_stop") @ResponseBody