From 1920906272b8e59991076f8338c1c9f46b2e1c11 Mon Sep 17 00:00:00 2001 From: fengyarnom Date: Fri, 21 Feb 2025 10:01:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E6=A3=80=E6=97=B6=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=9A=84=20ICCID=20=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=AD=98=E5=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.若是不存在则发送“AT+ICCID”命令给 DTU 查询 2. 数据表 gnssdevices 需要新增:ALTER TABLE gnssdevices ADD COLUMN iccid VARCHAR(36) COMMENT 'ICCID号,唯一'; 3. 新增 simcards 表 --- .../D3F0SelfCheckMessageExecutor.java | 22 ++++++++++++---- .../beidou/controller/APIController.java | 19 ++++++++++++++ sec-beidou/src/main/resources/db/schema.sql | 26 ++++++++++++++++++- 3 files changed, 61 insertions(+), 6 deletions(-) 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 6a37c2f1..06e28b5f 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 @@ -17,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.HashMap; import java.util.Timer; @@ -68,7 +69,8 @@ public class D3F0SelfCheckMessageExecutor implements Executor { - testAskICCID(device); + // 检查是否需要更新设备的 ICCID + checkAndAskICCID(device); // 检查是否需要对设备的F9P进行冷启动操作 if(device.getDeviceType() == Device.DEVICE_ROVER){ if(device.getModel() == GnssDevice.MODEL_G505){ @@ -182,10 +184,20 @@ public class D3F0SelfCheckMessageExecutor implements Executor> rsp = rtcmClient.configByUdp(device.getDeviceId(),sendCmd); - logger.info(rsp.toString()); + void checkAndAskICCID(Device device){ + // 如果设备的 ICCID 存在,那么就不用发送 "AT+ICCID" 指令 + if(device.getIccid() != null && !device.getIccid().trim().isEmpty()){ + 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.configByUdp(device.getDeviceId(),sendCmd); + // TODO: 将这个消息写到 msg 表中 + logger.info(sendCmd); } private void checkAndResetBTGnss(Device device){ if(device.getNoFixedAndFloatResult()>0 &&device.getAbnormalD341Num()>10){ 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 4b31e751..8e0b64f1 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 @@ -59,6 +59,9 @@ public class APIController extends BasicController{ //转成字符串 String dtuAck = configAck.substring(9*2); rxInfo += configAck+"("+HexUtil.HexString2String(dtuAck)+")"; + + // 检查是否需要更新 ICCID + updateICCID(device,dtuAck); } else if(msgType == 0xd313&&configAck.length()>=100){ //转成字符串 @@ -192,4 +195,20 @@ public class APIController extends BasicController{ msgMapper.insert(gnssMsg); } + void updateICCID(GnssDevice device,String dtuAck){ + if(dtuAck.contains("2B49434349443A")){ + // “2B49434349443A” 是“ +ICCID: ”的十六进制数据串 + // 如果部署 ICCID 的信息,那么就不要做下面的处理 + return; + } + 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(); + // 更新设备的ICCID + device.setIccid(iccid); + deviceMapper.updateById(device); + } + } } diff --git a/sec-beidou/src/main/resources/db/schema.sql b/sec-beidou/src/main/resources/db/schema.sql index f4443aa1..901d785d 100644 --- a/sec-beidou/src/main/resources/db/schema.sql +++ b/sec-beidou/src/main/resources/db/schema.sql @@ -68,6 +68,7 @@ CREATE TABLE IF NOT EXISTS `gnssdevices` ( `imei` varchar(16) DEFAULT NULL, `model` smallint DEFAULT 0, `loggingmode` smallint DEFAULT 0 COMMENT '日志模式: 0-精简模式(仅D3F0和D3F2), 1-完整模式', + `iccid` VARCHAR(36) DEFAULT NULL COMMENT 'ICCID号,唯一', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; @@ -325,6 +326,9 @@ CREATE TABLE IF NOT EXISTS `ApiKey` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*** + GNSS 单次解记录表 + */ CREATE TABLE IF NOT EXISTS `gnssdevicesinglerecords` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', `deviceid` varchar(64) NOT NULL COMMENT '设备ID', @@ -337,4 +341,24 @@ CREATE TABLE IF NOT EXISTS `gnssdevicesinglerecords` ( PRIMARY KEY (`id`), KEY `idx_deviceid_createtime` (`deviceid`,`createtime`), KEY `idx_createtime` (`createtime`) -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='GNSS单次解算记录表'; \ No newline at end of file +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='GNSS单次解算记录表'; + +/*** + SIM卡记录表 + */ +CREATE TABLE IF NOT EXISTS `simcards` ( + `id` INT NOT NULL AUTO_INCREMENT COMMENT '主键,自增,唯一', + `updatetime` DATETIME DEFAULT NULL COMMENT '最新一次查询接口记录的时间', + `iccid` VARCHAR(36) NOT NULL COMMENT 'ICCID号,唯一', + `msisd` VARCHAR(20) NOT NULL COMMENT '物联卡号码,SIM号,唯一', + `deviceid` VARCHAR(20) DEFAULT NULL COMMENT '设备ID号', + `status` TINYINT DEFAULT -1 COMMENT 'SIM卡状态(-1:未知, 1:待激活, 2:已激活, 3:停机, 4:注销, 5:库存, 6:可测试, 7:失效, 99:号码不存在)', + `remaining` DECIMAL(10,2) DEFAULT 0.00 COMMENT '剩余流量,单位为MB,保留两位小数', + `total` DECIMAL(10,2) DEFAULT 0.00 COMMENT '总流量,单位为MB,保留两位小数', + `used` DECIMAL(10,2) DEFAULT 0.00 COMMENT '已用流量,单位为MB,保留两位小数', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_iccid` (`iccid`), + UNIQUE KEY `uk_msisd` (`msisd`), + INDEX `idx_deviceid` (`deviceid`), + INDEX `idx_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='SIM卡信息表'; \ No newline at end of file