自检时检查设备的 ICCID 是否存在

1.若是不存在则发送“AT+ICCID”命令给 DTU 查询
2. 数据表 gnssdevices 需要新增:ALTER TABLE gnssdevices ADD COLUMN iccid VARCHAR(36) COMMENT 'ICCID号,唯一';
3. 新增 simcards 表
This commit is contained in:
fengyarnom 2025-02-21 10:01:57 +08:00
parent 74a0747a3c
commit 1920906272
3 changed files with 61 additions and 6 deletions

View File

@ -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<D3F0SelfCheckMessa
device.updateRx(message.getHeader(),message.getLen(),1);
ThreadManager.getFixedThreadPool().submit(() -> {
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<D3F0SelfCheckMessa
rtcmClient.config(device.getDeviceId(), sendCmd);
}
void testAskICCID(Device device){
String sendCmd = "d31a000D0080F34C0141542B4943434944";
HttpResp<HashMap<String, Object>> 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){

View File

@ -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);
}
}
}

View File

@ -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单次解算记录表';
) 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卡信息表';