From b011289fdf65b8055f5d2614dd46a6453995708f Mon Sep 17 00:00:00 2001 From: fengyarnom Date: Tue, 3 Jun 2025 16:34:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=9B=B4=E6=94=B9=20ICCID=20=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E9=80=BB=E8=BE=91=20-=20=E7=A1=AE=E4=BF=9D=E7=A6=BB?= =?UTF-8?q?=E7=BA=BF=E5=8F=88=E9=87=8D=E6=96=B0=E4=B8=8A=E7=BA=BF=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E6=98=AF=E5=90=A6=E6=9C=89=E6=8D=A2=E5=8D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beidou/controller/APIController.java | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) 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 7f6f88ac..398343f2 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 @@ -30,6 +30,8 @@ public class APIController extends BasicController{ DeviceCacheCmdMapper cacheCmdMapper; @Autowired WarningMsgMapper warningMsgMapper; + @Autowired + GnssStatusMapper gnssStatusMapper; /****** config ack *******/ @PostMapping(value = "/api/config_ack") @@ -151,6 +153,7 @@ public class APIController extends BasicController{ // 保存 saveMsg(deviceId, tenantId,0xD312, uploadCmd, true); + return null; } @@ -189,10 +192,8 @@ public class APIController extends BasicController{ // 保存 saveMsg(deviceId, tenantId,cacheCmd.getMsgtype(), cacheCmd.getCmd(), true); } - - // 检查iccid + // 设备上线后,检查是否需要重新查询更新 ICCID checkAndAskICCID(device); - return null; } @@ -244,16 +245,27 @@ public class APIController extends BasicController{ msgMapper.insert(gnssMsg); } - void checkAndAskICCID(GnssDevice device){ - if(device.getIccid() == null || device.getIccid().trim().isEmpty()) { - 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); + void checkAndAskICCID(GnssDevice device) { + GnssStatus status = gnssStatusMapper.getByDeviceId(device.getDeviceid()); + + // 1. 检查设备是否有 ICCID记录 (初始化) + // 2. 检查设备是否从离线恢复 (防止更换 SIM 卡) + // 3. 如果两种情况都不满足,则不查询 ICCID + + boolean isDeviceReconnecting = status != null && status.getState() == GnssStatus.STATE_OFFLINE; + boolean isIccidEmpty = device.getIccid() == null || device.getIccid().trim().isEmpty(); + + if (!isDeviceReconnecting && !isIccidEmpty) { + return; } + + 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); } void updateICCID(GnssDevice device, String dtuAck) { // 只检查 "ICCID:" 的十六进制部分 @@ -262,7 +274,6 @@ public class APIController extends BasicController{ } String content = HexUtil.HexString2String(dtuAck); if(content.contains("+ICCID:")){ - //System.out.println(content); String iccid = content.substring(content.indexOf("+ICCID:") + 8).trim(); iccid = iccid.split("\r\n")[0].trim(); device.setIccid(iccid);