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