diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
index 02f1291..dabfe36 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
@@ -22,20 +22,11 @@
@Component
public class SensorhubServerChannelInitialHandler extends ChannelInitializer {
- @Resource
- BirmmHexDecoder birmmHexDecoder;
-
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new LoggingHandler(LogLevel.INFO));
-// pipeline.addLast(new SensorhubDecoder());
-// pipeline.addLast(birmmHexDecoder);
+
pipeline.addLast(new BirmmHexDecoder());
pipeline.addLast(new CommonHexReplier());
-// 心跳续约
-// pipeline.addLast(this.heartBeatRespHandler);
-// pipeline.addLast(this.loginAuthRespHandler); 登录验证
-// pipeline.addLast(this.chatRespHandler); 对话处理器
}
}
\ No newline at end of file
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
index 02f1291..dabfe36 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
@@ -22,20 +22,11 @@
@Component
public class SensorhubServerChannelInitialHandler extends ChannelInitializer {
- @Resource
- BirmmHexDecoder birmmHexDecoder;
-
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new LoggingHandler(LogLevel.INFO));
-// pipeline.addLast(new SensorhubDecoder());
-// pipeline.addLast(birmmHexDecoder);
+
pipeline.addLast(new BirmmHexDecoder());
pipeline.addLast(new CommonHexReplier());
-// 心跳续约
-// pipeline.addLast(this.heartBeatRespHandler);
-// pipeline.addLast(this.loginAuthRespHandler); 登录验证
-// pipeline.addLast(this.chatRespHandler); 对话处理器
}
}
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
index 838ae44..d2921af 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
@@ -1,15 +1,14 @@
package com.casic.missiles.parser;
-import cn.hutool.http.HttpUtil;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.model.DeviceBizData;
import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.service.IDeviceBizDataService;
import com.casic.missiles.service.IDeviceFrameLogService;
import com.casic.missiles.service.IGeneralService;
import com.casic.missiles.service.impl.DeviceBizDataServiceImpl;
import com.casic.missiles.service.impl.DeviceFrameLogServiceImpl;
+import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.util.SnowflakeUtil;
import com.casic.missiles.util.SpringContextUtil;
import io.netty.buffer.ByteBuf;
@@ -61,14 +60,7 @@
log.info("上行HEX字节消息解析成功:{}", birmmFrame.toJSON().toJSONString());
// 保存日志
- DeviceFrameLog frameLog = new DeviceFrameLog();
- frameLog.setId(new SnowflakeUtil().nextId());
- frameLog.setDevcode(birmmFrame.getDevCode());
- frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase());
- frameLog.setRawBizFrame(birmmFrame.getRawBizFrameString());
- frameLog.setDataJson(birmmFrame.toJSON().toJSONString());
- frameLog.setLogtime(birmmFrame.getLogTime());
- frameLogService.save(frameLog);
+ Long logId = defaultService.saveFrameLog(birmmFrame, frameBytes);
// 推送
// 需要异步推
@@ -76,18 +68,12 @@
// 保存业务数据
if (birmmFrame.isBizDataFrame()) {
- List bizDataList = birmmFrame.convertToBizDataList();
- for (DeviceBizData bizData : bizDataList) {
- // 设置其他的属性
- bizData.setId(new SnowflakeUtil().nextId());
- bizData.setFrameLogId(frameLog.getId()); // 关联日志记录id
- bizData.setDevcode(birmmFrame.getDevCode());
- bizData.setDeviceType(Integer.valueOf(birmmFrame.getDeviceType()));
- bizData.setLogtime(birmmFrame.getLogTime());
- }
+ defaultService.saveBizData(birmmFrame, logId);
+ }
- // 批量保存
- bizDataService.saveBatch(bizDataList);
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
}
// 创建回复消息
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
index 02f1291..dabfe36 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
@@ -22,20 +22,11 @@
@Component
public class SensorhubServerChannelInitialHandler extends ChannelInitializer {
- @Resource
- BirmmHexDecoder birmmHexDecoder;
-
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new LoggingHandler(LogLevel.INFO));
-// pipeline.addLast(new SensorhubDecoder());
-// pipeline.addLast(birmmHexDecoder);
+
pipeline.addLast(new BirmmHexDecoder());
pipeline.addLast(new CommonHexReplier());
-// 心跳续约
-// pipeline.addLast(this.heartBeatRespHandler);
-// pipeline.addLast(this.loginAuthRespHandler); 登录验证
-// pipeline.addLast(this.chatRespHandler); 对话处理器
}
}
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
index 838ae44..d2921af 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
@@ -1,15 +1,14 @@
package com.casic.missiles.parser;
-import cn.hutool.http.HttpUtil;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.model.DeviceBizData;
import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.service.IDeviceBizDataService;
import com.casic.missiles.service.IDeviceFrameLogService;
import com.casic.missiles.service.IGeneralService;
import com.casic.missiles.service.impl.DeviceBizDataServiceImpl;
import com.casic.missiles.service.impl.DeviceFrameLogServiceImpl;
+import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.util.SnowflakeUtil;
import com.casic.missiles.util.SpringContextUtil;
import io.netty.buffer.ByteBuf;
@@ -61,14 +60,7 @@
log.info("上行HEX字节消息解析成功:{}", birmmFrame.toJSON().toJSONString());
// 保存日志
- DeviceFrameLog frameLog = new DeviceFrameLog();
- frameLog.setId(new SnowflakeUtil().nextId());
- frameLog.setDevcode(birmmFrame.getDevCode());
- frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase());
- frameLog.setRawBizFrame(birmmFrame.getRawBizFrameString());
- frameLog.setDataJson(birmmFrame.toJSON().toJSONString());
- frameLog.setLogtime(birmmFrame.getLogTime());
- frameLogService.save(frameLog);
+ Long logId = defaultService.saveFrameLog(birmmFrame, frameBytes);
// 推送
// 需要异步推
@@ -76,18 +68,12 @@
// 保存业务数据
if (birmmFrame.isBizDataFrame()) {
- List bizDataList = birmmFrame.convertToBizDataList();
- for (DeviceBizData bizData : bizDataList) {
- // 设置其他的属性
- bizData.setId(new SnowflakeUtil().nextId());
- bizData.setFrameLogId(frameLog.getId()); // 关联日志记录id
- bizData.setDevcode(birmmFrame.getDevCode());
- bizData.setDeviceType(Integer.valueOf(birmmFrame.getDeviceType()));
- bizData.setLogtime(birmmFrame.getLogTime());
- }
+ defaultService.saveBizData(birmmFrame, logId);
+ }
- // 批量保存
- bizDataService.saveBatch(bizDataList);
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
}
// 创建回复消息
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
index 6fa8cce..eef7b55 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
@@ -30,7 +30,7 @@
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, Object obj) throws Exception {
- System.out.println("Client->Server:" + obj);
+// System.out.println("Client->Server:" + obj);
byte[] replyBytes = BytesUtil.hexStringToBytes(obj.toString());
ByteBuf replyByteBuf = Unpooled.copiedBuffer(replyBytes);
//进行回复
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
index 02f1291..dabfe36 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
@@ -22,20 +22,11 @@
@Component
public class SensorhubServerChannelInitialHandler extends ChannelInitializer {
- @Resource
- BirmmHexDecoder birmmHexDecoder;
-
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new LoggingHandler(LogLevel.INFO));
-// pipeline.addLast(new SensorhubDecoder());
-// pipeline.addLast(birmmHexDecoder);
+
pipeline.addLast(new BirmmHexDecoder());
pipeline.addLast(new CommonHexReplier());
-// 心跳续约
-// pipeline.addLast(this.heartBeatRespHandler);
-// pipeline.addLast(this.loginAuthRespHandler); 登录验证
-// pipeline.addLast(this.chatRespHandler); 对话处理器
}
}
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
index 838ae44..d2921af 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
@@ -1,15 +1,14 @@
package com.casic.missiles.parser;
-import cn.hutool.http.HttpUtil;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.model.DeviceBizData;
import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.service.IDeviceBizDataService;
import com.casic.missiles.service.IDeviceFrameLogService;
import com.casic.missiles.service.IGeneralService;
import com.casic.missiles.service.impl.DeviceBizDataServiceImpl;
import com.casic.missiles.service.impl.DeviceFrameLogServiceImpl;
+import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.util.SnowflakeUtil;
import com.casic.missiles.util.SpringContextUtil;
import io.netty.buffer.ByteBuf;
@@ -61,14 +60,7 @@
log.info("上行HEX字节消息解析成功:{}", birmmFrame.toJSON().toJSONString());
// 保存日志
- DeviceFrameLog frameLog = new DeviceFrameLog();
- frameLog.setId(new SnowflakeUtil().nextId());
- frameLog.setDevcode(birmmFrame.getDevCode());
- frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase());
- frameLog.setRawBizFrame(birmmFrame.getRawBizFrameString());
- frameLog.setDataJson(birmmFrame.toJSON().toJSONString());
- frameLog.setLogtime(birmmFrame.getLogTime());
- frameLogService.save(frameLog);
+ Long logId = defaultService.saveFrameLog(birmmFrame, frameBytes);
// 推送
// 需要异步推
@@ -76,18 +68,12 @@
// 保存业务数据
if (birmmFrame.isBizDataFrame()) {
- List bizDataList = birmmFrame.convertToBizDataList();
- for (DeviceBizData bizData : bizDataList) {
- // 设置其他的属性
- bizData.setId(new SnowflakeUtil().nextId());
- bizData.setFrameLogId(frameLog.getId()); // 关联日志记录id
- bizData.setDevcode(birmmFrame.getDevCode());
- bizData.setDeviceType(Integer.valueOf(birmmFrame.getDeviceType()));
- bizData.setLogtime(birmmFrame.getLogTime());
- }
+ defaultService.saveBizData(birmmFrame, logId);
+ }
- // 批量保存
- bizDataService.saveBatch(bizDataList);
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
}
// 创建回复消息
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
index 6fa8cce..eef7b55 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
@@ -30,7 +30,7 @@
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, Object obj) throws Exception {
- System.out.println("Client->Server:" + obj);
+// System.out.println("Client->Server:" + obj);
byte[] replyBytes = BytesUtil.hexStringToBytes(obj.toString());
ByteBuf replyByteBuf = Unpooled.copiedBuffer(replyBytes);
//进行回复
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
index cb5ab89..bd1b402 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
@@ -16,6 +16,8 @@
Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes);
void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId);
+ void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame);
+
void pushMessage(BirmmBaseFrame birmmFrame);
/**
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
index 02f1291..dabfe36 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
@@ -22,20 +22,11 @@
@Component
public class SensorhubServerChannelInitialHandler extends ChannelInitializer {
- @Resource
- BirmmHexDecoder birmmHexDecoder;
-
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new LoggingHandler(LogLevel.INFO));
-// pipeline.addLast(new SensorhubDecoder());
-// pipeline.addLast(birmmHexDecoder);
+
pipeline.addLast(new BirmmHexDecoder());
pipeline.addLast(new CommonHexReplier());
-// 心跳续约
-// pipeline.addLast(this.heartBeatRespHandler);
-// pipeline.addLast(this.loginAuthRespHandler); 登录验证
-// pipeline.addLast(this.chatRespHandler); 对话处理器
}
}
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
index 838ae44..d2921af 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
@@ -1,15 +1,14 @@
package com.casic.missiles.parser;
-import cn.hutool.http.HttpUtil;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.model.DeviceBizData;
import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.service.IDeviceBizDataService;
import com.casic.missiles.service.IDeviceFrameLogService;
import com.casic.missiles.service.IGeneralService;
import com.casic.missiles.service.impl.DeviceBizDataServiceImpl;
import com.casic.missiles.service.impl.DeviceFrameLogServiceImpl;
+import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.util.SnowflakeUtil;
import com.casic.missiles.util.SpringContextUtil;
import io.netty.buffer.ByteBuf;
@@ -61,14 +60,7 @@
log.info("上行HEX字节消息解析成功:{}", birmmFrame.toJSON().toJSONString());
// 保存日志
- DeviceFrameLog frameLog = new DeviceFrameLog();
- frameLog.setId(new SnowflakeUtil().nextId());
- frameLog.setDevcode(birmmFrame.getDevCode());
- frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase());
- frameLog.setRawBizFrame(birmmFrame.getRawBizFrameString());
- frameLog.setDataJson(birmmFrame.toJSON().toJSONString());
- frameLog.setLogtime(birmmFrame.getLogTime());
- frameLogService.save(frameLog);
+ Long logId = defaultService.saveFrameLog(birmmFrame, frameBytes);
// 推送
// 需要异步推
@@ -76,18 +68,12 @@
// 保存业务数据
if (birmmFrame.isBizDataFrame()) {
- List bizDataList = birmmFrame.convertToBizDataList();
- for (DeviceBizData bizData : bizDataList) {
- // 设置其他的属性
- bizData.setId(new SnowflakeUtil().nextId());
- bizData.setFrameLogId(frameLog.getId()); // 关联日志记录id
- bizData.setDevcode(birmmFrame.getDevCode());
- bizData.setDeviceType(Integer.valueOf(birmmFrame.getDeviceType()));
- bizData.setLogtime(birmmFrame.getLogTime());
- }
+ defaultService.saveBizData(birmmFrame, logId);
+ }
- // 批量保存
- bizDataService.saveBatch(bizDataList);
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
}
// 创建回复消息
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
index 6fa8cce..eef7b55 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
@@ -30,7 +30,7 @@
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, Object obj) throws Exception {
- System.out.println("Client->Server:" + obj);
+// System.out.println("Client->Server:" + obj);
byte[] replyBytes = BytesUtil.hexStringToBytes(obj.toString());
ByteBuf replyByteBuf = Unpooled.copiedBuffer(replyBytes);
//进行回复
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
index cb5ab89..bd1b402 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
@@ -16,6 +16,8 @@
Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes);
void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId);
+ void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame);
+
void pushMessage(BirmmBaseFrame birmmFrame);
/**
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
index 9b1353d..704c540 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
@@ -5,10 +5,8 @@
import com.casic.missiles.enums.BirmmFrameAttributeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.frame.BirmmFrameBuilderFactory;
-import com.casic.missiles.model.Device;
-import com.casic.missiles.model.DeviceBizData;
-import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.model.SubscribeStore;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+import com.casic.missiles.model.*;
import com.casic.missiles.parser.BirmmProtocolParser;
import com.casic.missiles.parser.safe.SafeStrategy;
import com.casic.missiles.parser.safe.impl.Sm4;
@@ -154,7 +152,20 @@
}
@Override
+ public void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame) {
+ List imeiTags = baseFrame.getTagList().get(SensorStartupTag.class.getSimpleName());
+ if (ObjectUtil.isNotNull(imeiTags) && !imeiTags.isEmpty()) {
+ SensorStartupTag imeiTag = (SensorStartupTag) imeiTags.get(0);
+ deviceService.updateDeviceImei(baseFrame.getDevCode(), imeiTag.getImei(), imeiTag.getIccid());
+ }
+ }
+
+ @Override
public void pushMessage(BirmmBaseFrame birmmFrame) {
+ if (!birmmFrame.needPushToApplication()) {
+ return ;
+ }
+
Device device = deviceService.getDeviceByDeviceCode(birmmFrame.getDevCode());
if (ObjectUtil.isNotNull(device) && ObjectUtil.isNotNull(device.getGroupId())) {
List ssList = subscribeService.getSubscribeListByProduct(device.getGroupId());
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
index 02f1291..dabfe36 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
@@ -22,20 +22,11 @@
@Component
public class SensorhubServerChannelInitialHandler extends ChannelInitializer {
- @Resource
- BirmmHexDecoder birmmHexDecoder;
-
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new LoggingHandler(LogLevel.INFO));
-// pipeline.addLast(new SensorhubDecoder());
-// pipeline.addLast(birmmHexDecoder);
+
pipeline.addLast(new BirmmHexDecoder());
pipeline.addLast(new CommonHexReplier());
-// 心跳续约
-// pipeline.addLast(this.heartBeatRespHandler);
-// pipeline.addLast(this.loginAuthRespHandler); 登录验证
-// pipeline.addLast(this.chatRespHandler); 对话处理器
}
}
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
index 838ae44..d2921af 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
@@ -1,15 +1,14 @@
package com.casic.missiles.parser;
-import cn.hutool.http.HttpUtil;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.model.DeviceBizData;
import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.service.IDeviceBizDataService;
import com.casic.missiles.service.IDeviceFrameLogService;
import com.casic.missiles.service.IGeneralService;
import com.casic.missiles.service.impl.DeviceBizDataServiceImpl;
import com.casic.missiles.service.impl.DeviceFrameLogServiceImpl;
+import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.util.SnowflakeUtil;
import com.casic.missiles.util.SpringContextUtil;
import io.netty.buffer.ByteBuf;
@@ -61,14 +60,7 @@
log.info("上行HEX字节消息解析成功:{}", birmmFrame.toJSON().toJSONString());
// 保存日志
- DeviceFrameLog frameLog = new DeviceFrameLog();
- frameLog.setId(new SnowflakeUtil().nextId());
- frameLog.setDevcode(birmmFrame.getDevCode());
- frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase());
- frameLog.setRawBizFrame(birmmFrame.getRawBizFrameString());
- frameLog.setDataJson(birmmFrame.toJSON().toJSONString());
- frameLog.setLogtime(birmmFrame.getLogTime());
- frameLogService.save(frameLog);
+ Long logId = defaultService.saveFrameLog(birmmFrame, frameBytes);
// 推送
// 需要异步推
@@ -76,18 +68,12 @@
// 保存业务数据
if (birmmFrame.isBizDataFrame()) {
- List bizDataList = birmmFrame.convertToBizDataList();
- for (DeviceBizData bizData : bizDataList) {
- // 设置其他的属性
- bizData.setId(new SnowflakeUtil().nextId());
- bizData.setFrameLogId(frameLog.getId()); // 关联日志记录id
- bizData.setDevcode(birmmFrame.getDevCode());
- bizData.setDeviceType(Integer.valueOf(birmmFrame.getDeviceType()));
- bizData.setLogtime(birmmFrame.getLogTime());
- }
+ defaultService.saveBizData(birmmFrame, logId);
+ }
- // 批量保存
- bizDataService.saveBatch(bizDataList);
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
}
// 创建回复消息
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
index 6fa8cce..eef7b55 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
@@ -30,7 +30,7 @@
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, Object obj) throws Exception {
- System.out.println("Client->Server:" + obj);
+// System.out.println("Client->Server:" + obj);
byte[] replyBytes = BytesUtil.hexStringToBytes(obj.toString());
ByteBuf replyByteBuf = Unpooled.copiedBuffer(replyBytes);
//进行回复
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
index cb5ab89..bd1b402 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
@@ -16,6 +16,8 @@
Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes);
void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId);
+ void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame);
+
void pushMessage(BirmmBaseFrame birmmFrame);
/**
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
index 9b1353d..704c540 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
@@ -5,10 +5,8 @@
import com.casic.missiles.enums.BirmmFrameAttributeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.frame.BirmmFrameBuilderFactory;
-import com.casic.missiles.model.Device;
-import com.casic.missiles.model.DeviceBizData;
-import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.model.SubscribeStore;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+import com.casic.missiles.model.*;
import com.casic.missiles.parser.BirmmProtocolParser;
import com.casic.missiles.parser.safe.SafeStrategy;
import com.casic.missiles.parser.safe.impl.Sm4;
@@ -154,7 +152,20 @@
}
@Override
+ public void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame) {
+ List imeiTags = baseFrame.getTagList().get(SensorStartupTag.class.getSimpleName());
+ if (ObjectUtil.isNotNull(imeiTags) && !imeiTags.isEmpty()) {
+ SensorStartupTag imeiTag = (SensorStartupTag) imeiTags.get(0);
+ deviceService.updateDeviceImei(baseFrame.getDevCode(), imeiTag.getImei(), imeiTag.getIccid());
+ }
+ }
+
+ @Override
public void pushMessage(BirmmBaseFrame birmmFrame) {
+ if (!birmmFrame.needPushToApplication()) {
+ return ;
+ }
+
Device device = deviceService.getDeviceByDeviceCode(birmmFrame.getDevCode());
if (ObjectUtil.isNotNull(device) && ObjectUtil.isNotNull(device.getGroupId())) {
List ssList = subscribeService.getSubscribeListByProduct(device.getGroupId());
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
index 26c13ec..acfa22f 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
@@ -93,6 +93,6 @@
buff.writeBytes(msg.getBytes(StandardCharsets.UTF_8));
ctx.channel().writeAndFlush(buff);
- log.info("通过Tcp推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
+ log.info("通过Flume推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
}
}
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
index 02f1291..dabfe36 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
@@ -22,20 +22,11 @@
@Component
public class SensorhubServerChannelInitialHandler extends ChannelInitializer {
- @Resource
- BirmmHexDecoder birmmHexDecoder;
-
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new LoggingHandler(LogLevel.INFO));
-// pipeline.addLast(new SensorhubDecoder());
-// pipeline.addLast(birmmHexDecoder);
+
pipeline.addLast(new BirmmHexDecoder());
pipeline.addLast(new CommonHexReplier());
-// 心跳续约
-// pipeline.addLast(this.heartBeatRespHandler);
-// pipeline.addLast(this.loginAuthRespHandler); 登录验证
-// pipeline.addLast(this.chatRespHandler); 对话处理器
}
}
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
index 838ae44..d2921af 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
@@ -1,15 +1,14 @@
package com.casic.missiles.parser;
-import cn.hutool.http.HttpUtil;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.model.DeviceBizData;
import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.service.IDeviceBizDataService;
import com.casic.missiles.service.IDeviceFrameLogService;
import com.casic.missiles.service.IGeneralService;
import com.casic.missiles.service.impl.DeviceBizDataServiceImpl;
import com.casic.missiles.service.impl.DeviceFrameLogServiceImpl;
+import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.util.SnowflakeUtil;
import com.casic.missiles.util.SpringContextUtil;
import io.netty.buffer.ByteBuf;
@@ -61,14 +60,7 @@
log.info("上行HEX字节消息解析成功:{}", birmmFrame.toJSON().toJSONString());
// 保存日志
- DeviceFrameLog frameLog = new DeviceFrameLog();
- frameLog.setId(new SnowflakeUtil().nextId());
- frameLog.setDevcode(birmmFrame.getDevCode());
- frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase());
- frameLog.setRawBizFrame(birmmFrame.getRawBizFrameString());
- frameLog.setDataJson(birmmFrame.toJSON().toJSONString());
- frameLog.setLogtime(birmmFrame.getLogTime());
- frameLogService.save(frameLog);
+ Long logId = defaultService.saveFrameLog(birmmFrame, frameBytes);
// 推送
// 需要异步推
@@ -76,18 +68,12 @@
// 保存业务数据
if (birmmFrame.isBizDataFrame()) {
- List bizDataList = birmmFrame.convertToBizDataList();
- for (DeviceBizData bizData : bizDataList) {
- // 设置其他的属性
- bizData.setId(new SnowflakeUtil().nextId());
- bizData.setFrameLogId(frameLog.getId()); // 关联日志记录id
- bizData.setDevcode(birmmFrame.getDevCode());
- bizData.setDeviceType(Integer.valueOf(birmmFrame.getDeviceType()));
- bizData.setLogtime(birmmFrame.getLogTime());
- }
+ defaultService.saveBizData(birmmFrame, logId);
+ }
- // 批量保存
- bizDataService.saveBatch(bizDataList);
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
}
// 创建回复消息
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
index 6fa8cce..eef7b55 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
@@ -30,7 +30,7 @@
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, Object obj) throws Exception {
- System.out.println("Client->Server:" + obj);
+// System.out.println("Client->Server:" + obj);
byte[] replyBytes = BytesUtil.hexStringToBytes(obj.toString());
ByteBuf replyByteBuf = Unpooled.copiedBuffer(replyBytes);
//进行回复
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
index cb5ab89..bd1b402 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
@@ -16,6 +16,8 @@
Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes);
void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId);
+ void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame);
+
void pushMessage(BirmmBaseFrame birmmFrame);
/**
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
index 9b1353d..704c540 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
@@ -5,10 +5,8 @@
import com.casic.missiles.enums.BirmmFrameAttributeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.frame.BirmmFrameBuilderFactory;
-import com.casic.missiles.model.Device;
-import com.casic.missiles.model.DeviceBizData;
-import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.model.SubscribeStore;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+import com.casic.missiles.model.*;
import com.casic.missiles.parser.BirmmProtocolParser;
import com.casic.missiles.parser.safe.SafeStrategy;
import com.casic.missiles.parser.safe.impl.Sm4;
@@ -154,7 +152,20 @@
}
@Override
+ public void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame) {
+ List imeiTags = baseFrame.getTagList().get(SensorStartupTag.class.getSimpleName());
+ if (ObjectUtil.isNotNull(imeiTags) && !imeiTags.isEmpty()) {
+ SensorStartupTag imeiTag = (SensorStartupTag) imeiTags.get(0);
+ deviceService.updateDeviceImei(baseFrame.getDevCode(), imeiTag.getImei(), imeiTag.getIccid());
+ }
+ }
+
+ @Override
public void pushMessage(BirmmBaseFrame birmmFrame) {
+ if (!birmmFrame.needPushToApplication()) {
+ return ;
+ }
+
Device device = deviceService.getDeviceByDeviceCode(birmmFrame.getDevCode());
if (ObjectUtil.isNotNull(device) && ObjectUtil.isNotNull(device.getGroupId())) {
List ssList = subscribeService.getSubscribeListByProduct(device.getGroupId());
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
index 26c13ec..acfa22f 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
@@ -93,6 +93,6 @@
buff.writeBytes(msg.getBytes(StandardCharsets.UTF_8));
ctx.channel().writeAndFlush(buff);
- log.info("通过Tcp推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
+ log.info("通过Flume推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
}
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
index b786666..0702199 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
@@ -1,6 +1,7 @@
package com.casic.missiles.frame.base;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
import com.casic.missiles.frame.tag.config.DateTimeTag;
import com.casic.missiles.model.DeviceBizData;
import lombok.Data;
@@ -61,6 +62,14 @@
return false;
}
+ public boolean needPushToApplication() {
+ return true;
+ }
+
+ public boolean hasSensorStartupTag() {
+ return getTagList().containsKey(SensorStartupTag.class.getSimpleName());
+ }
+
public List convertToBizDataList() {
return new ArrayList<>();
}
@@ -75,7 +84,15 @@
public void doParseBizTag() {}
public void replyPduType() {
+ StringBuilder pduType;
+ int pduValue = Integer.parseInt(operationType) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
+ pduType = new StringBuilder(Integer.toHexString(pduValue));
+ while (pduType.length() != 4) {
+ pduType.insert(0, "0");
+ }
+
+ this.setPduType(pduType.toString().toUpperCase());
}
public void replyBizTag() {
@@ -87,5 +104,4 @@
tags.add(dateTimeTag);
tagList.put(DateTimeTag.class.getSimpleName(), tags);
}
-
}
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
index 02f1291..dabfe36 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
@@ -22,20 +22,11 @@
@Component
public class SensorhubServerChannelInitialHandler extends ChannelInitializer {
- @Resource
- BirmmHexDecoder birmmHexDecoder;
-
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new LoggingHandler(LogLevel.INFO));
-// pipeline.addLast(new SensorhubDecoder());
-// pipeline.addLast(birmmHexDecoder);
+
pipeline.addLast(new BirmmHexDecoder());
pipeline.addLast(new CommonHexReplier());
-// 心跳续约
-// pipeline.addLast(this.heartBeatRespHandler);
-// pipeline.addLast(this.loginAuthRespHandler); 登录验证
-// pipeline.addLast(this.chatRespHandler); 对话处理器
}
}
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
index 838ae44..d2921af 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
@@ -1,15 +1,14 @@
package com.casic.missiles.parser;
-import cn.hutool.http.HttpUtil;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.model.DeviceBizData;
import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.service.IDeviceBizDataService;
import com.casic.missiles.service.IDeviceFrameLogService;
import com.casic.missiles.service.IGeneralService;
import com.casic.missiles.service.impl.DeviceBizDataServiceImpl;
import com.casic.missiles.service.impl.DeviceFrameLogServiceImpl;
+import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.util.SnowflakeUtil;
import com.casic.missiles.util.SpringContextUtil;
import io.netty.buffer.ByteBuf;
@@ -61,14 +60,7 @@
log.info("上行HEX字节消息解析成功:{}", birmmFrame.toJSON().toJSONString());
// 保存日志
- DeviceFrameLog frameLog = new DeviceFrameLog();
- frameLog.setId(new SnowflakeUtil().nextId());
- frameLog.setDevcode(birmmFrame.getDevCode());
- frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase());
- frameLog.setRawBizFrame(birmmFrame.getRawBizFrameString());
- frameLog.setDataJson(birmmFrame.toJSON().toJSONString());
- frameLog.setLogtime(birmmFrame.getLogTime());
- frameLogService.save(frameLog);
+ Long logId = defaultService.saveFrameLog(birmmFrame, frameBytes);
// 推送
// 需要异步推
@@ -76,18 +68,12 @@
// 保存业务数据
if (birmmFrame.isBizDataFrame()) {
- List bizDataList = birmmFrame.convertToBizDataList();
- for (DeviceBizData bizData : bizDataList) {
- // 设置其他的属性
- bizData.setId(new SnowflakeUtil().nextId());
- bizData.setFrameLogId(frameLog.getId()); // 关联日志记录id
- bizData.setDevcode(birmmFrame.getDevCode());
- bizData.setDeviceType(Integer.valueOf(birmmFrame.getDeviceType()));
- bizData.setLogtime(birmmFrame.getLogTime());
- }
+ defaultService.saveBizData(birmmFrame, logId);
+ }
- // 批量保存
- bizDataService.saveBatch(bizDataList);
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
}
// 创建回复消息
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
index 6fa8cce..eef7b55 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
@@ -30,7 +30,7 @@
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, Object obj) throws Exception {
- System.out.println("Client->Server:" + obj);
+// System.out.println("Client->Server:" + obj);
byte[] replyBytes = BytesUtil.hexStringToBytes(obj.toString());
ByteBuf replyByteBuf = Unpooled.copiedBuffer(replyBytes);
//进行回复
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
index cb5ab89..bd1b402 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
@@ -16,6 +16,8 @@
Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes);
void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId);
+ void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame);
+
void pushMessage(BirmmBaseFrame birmmFrame);
/**
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
index 9b1353d..704c540 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
@@ -5,10 +5,8 @@
import com.casic.missiles.enums.BirmmFrameAttributeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.frame.BirmmFrameBuilderFactory;
-import com.casic.missiles.model.Device;
-import com.casic.missiles.model.DeviceBizData;
-import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.model.SubscribeStore;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+import com.casic.missiles.model.*;
import com.casic.missiles.parser.BirmmProtocolParser;
import com.casic.missiles.parser.safe.SafeStrategy;
import com.casic.missiles.parser.safe.impl.Sm4;
@@ -154,7 +152,20 @@
}
@Override
+ public void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame) {
+ List imeiTags = baseFrame.getTagList().get(SensorStartupTag.class.getSimpleName());
+ if (ObjectUtil.isNotNull(imeiTags) && !imeiTags.isEmpty()) {
+ SensorStartupTag imeiTag = (SensorStartupTag) imeiTags.get(0);
+ deviceService.updateDeviceImei(baseFrame.getDevCode(), imeiTag.getImei(), imeiTag.getIccid());
+ }
+ }
+
+ @Override
public void pushMessage(BirmmBaseFrame birmmFrame) {
+ if (!birmmFrame.needPushToApplication()) {
+ return ;
+ }
+
Device device = deviceService.getDeviceByDeviceCode(birmmFrame.getDevCode());
if (ObjectUtil.isNotNull(device) && ObjectUtil.isNotNull(device.getGroupId())) {
List ssList = subscribeService.getSubscribeListByProduct(device.getGroupId());
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
index 26c13ec..acfa22f 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
@@ -93,6 +93,6 @@
buff.writeBytes(msg.getBytes(StandardCharsets.UTF_8));
ctx.channel().writeAndFlush(buff);
- log.info("通过Tcp推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
+ log.info("通过Flume推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
}
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
index b786666..0702199 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
@@ -1,6 +1,7 @@
package com.casic.missiles.frame.base;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
import com.casic.missiles.frame.tag.config.DateTimeTag;
import com.casic.missiles.model.DeviceBizData;
import lombok.Data;
@@ -61,6 +62,14 @@
return false;
}
+ public boolean needPushToApplication() {
+ return true;
+ }
+
+ public boolean hasSensorStartupTag() {
+ return getTagList().containsKey(SensorStartupTag.class.getSimpleName());
+ }
+
public List convertToBizDataList() {
return new ArrayList<>();
}
@@ -75,7 +84,15 @@
public void doParseBizTag() {}
public void replyPduType() {
+ StringBuilder pduType;
+ int pduValue = Integer.parseInt(operationType) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
+ pduType = new StringBuilder(Integer.toHexString(pduValue));
+ while (pduType.length() != 4) {
+ pduType.insert(0, "0");
+ }
+
+ this.setPduType(pduType.toString().toUpperCase());
}
public void replyBizTag() {
@@ -87,5 +104,4 @@
tags.add(dateTimeTag);
tagList.put(DateTimeTag.class.getSimpleName(), tags);
}
-
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
new file mode 100644
index 0000000..8a30fc2
--- /dev/null
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.frame.base;
+
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+
+import java.time.format.DateTimeFormatter;
+
+public class BirmmStartupRequestFrame extends BirmmBaseFrame {
+
+ public final String MESSAGE_TYPE = "Startup";
+
+ @Override
+ public JSONObject toJSON() {
+ JSONObject json = super.toJSON();
+
+ JSONObject body = new JSONObject();
+ json.put("mType", MESSAGE_TYPE);
+ body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+ if (getTagList().containsKey(SensorStartupTag.class.getSimpleName())) {
+ SensorStartupTag tag = (SensorStartupTag) getTagList().get(SensorStartupTag.class.getSimpleName()).get(0);
+ body.put("imei", tag.getImei());
+ body.put("iccid", tag.getIccid());
+ }
+
+ json.put("mBody", body);
+
+ return json;
+ }
+
+ @Override
+ public boolean needPushToApplication() {
+ return false;
+ }
+}
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
index 02f1291..dabfe36 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
@@ -22,20 +22,11 @@
@Component
public class SensorhubServerChannelInitialHandler extends ChannelInitializer {
- @Resource
- BirmmHexDecoder birmmHexDecoder;
-
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new LoggingHandler(LogLevel.INFO));
-// pipeline.addLast(new SensorhubDecoder());
-// pipeline.addLast(birmmHexDecoder);
+
pipeline.addLast(new BirmmHexDecoder());
pipeline.addLast(new CommonHexReplier());
-// 心跳续约
-// pipeline.addLast(this.heartBeatRespHandler);
-// pipeline.addLast(this.loginAuthRespHandler); 登录验证
-// pipeline.addLast(this.chatRespHandler); 对话处理器
}
}
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
index 838ae44..d2921af 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
@@ -1,15 +1,14 @@
package com.casic.missiles.parser;
-import cn.hutool.http.HttpUtil;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.model.DeviceBizData;
import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.service.IDeviceBizDataService;
import com.casic.missiles.service.IDeviceFrameLogService;
import com.casic.missiles.service.IGeneralService;
import com.casic.missiles.service.impl.DeviceBizDataServiceImpl;
import com.casic.missiles.service.impl.DeviceFrameLogServiceImpl;
+import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.util.SnowflakeUtil;
import com.casic.missiles.util.SpringContextUtil;
import io.netty.buffer.ByteBuf;
@@ -61,14 +60,7 @@
log.info("上行HEX字节消息解析成功:{}", birmmFrame.toJSON().toJSONString());
// 保存日志
- DeviceFrameLog frameLog = new DeviceFrameLog();
- frameLog.setId(new SnowflakeUtil().nextId());
- frameLog.setDevcode(birmmFrame.getDevCode());
- frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase());
- frameLog.setRawBizFrame(birmmFrame.getRawBizFrameString());
- frameLog.setDataJson(birmmFrame.toJSON().toJSONString());
- frameLog.setLogtime(birmmFrame.getLogTime());
- frameLogService.save(frameLog);
+ Long logId = defaultService.saveFrameLog(birmmFrame, frameBytes);
// 推送
// 需要异步推
@@ -76,18 +68,12 @@
// 保存业务数据
if (birmmFrame.isBizDataFrame()) {
- List bizDataList = birmmFrame.convertToBizDataList();
- for (DeviceBizData bizData : bizDataList) {
- // 设置其他的属性
- bizData.setId(new SnowflakeUtil().nextId());
- bizData.setFrameLogId(frameLog.getId()); // 关联日志记录id
- bizData.setDevcode(birmmFrame.getDevCode());
- bizData.setDeviceType(Integer.valueOf(birmmFrame.getDeviceType()));
- bizData.setLogtime(birmmFrame.getLogTime());
- }
+ defaultService.saveBizData(birmmFrame, logId);
+ }
- // 批量保存
- bizDataService.saveBatch(bizDataList);
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
}
// 创建回复消息
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
index 6fa8cce..eef7b55 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
@@ -30,7 +30,7 @@
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, Object obj) throws Exception {
- System.out.println("Client->Server:" + obj);
+// System.out.println("Client->Server:" + obj);
byte[] replyBytes = BytesUtil.hexStringToBytes(obj.toString());
ByteBuf replyByteBuf = Unpooled.copiedBuffer(replyBytes);
//进行回复
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
index cb5ab89..bd1b402 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
@@ -16,6 +16,8 @@
Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes);
void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId);
+ void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame);
+
void pushMessage(BirmmBaseFrame birmmFrame);
/**
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
index 9b1353d..704c540 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
@@ -5,10 +5,8 @@
import com.casic.missiles.enums.BirmmFrameAttributeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.frame.BirmmFrameBuilderFactory;
-import com.casic.missiles.model.Device;
-import com.casic.missiles.model.DeviceBizData;
-import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.model.SubscribeStore;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+import com.casic.missiles.model.*;
import com.casic.missiles.parser.BirmmProtocolParser;
import com.casic.missiles.parser.safe.SafeStrategy;
import com.casic.missiles.parser.safe.impl.Sm4;
@@ -154,7 +152,20 @@
}
@Override
+ public void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame) {
+ List imeiTags = baseFrame.getTagList().get(SensorStartupTag.class.getSimpleName());
+ if (ObjectUtil.isNotNull(imeiTags) && !imeiTags.isEmpty()) {
+ SensorStartupTag imeiTag = (SensorStartupTag) imeiTags.get(0);
+ deviceService.updateDeviceImei(baseFrame.getDevCode(), imeiTag.getImei(), imeiTag.getIccid());
+ }
+ }
+
+ @Override
public void pushMessage(BirmmBaseFrame birmmFrame) {
+ if (!birmmFrame.needPushToApplication()) {
+ return ;
+ }
+
Device device = deviceService.getDeviceByDeviceCode(birmmFrame.getDevCode());
if (ObjectUtil.isNotNull(device) && ObjectUtil.isNotNull(device.getGroupId())) {
List ssList = subscribeService.getSubscribeListByProduct(device.getGroupId());
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
index 26c13ec..acfa22f 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
@@ -93,6 +93,6 @@
buff.writeBytes(msg.getBytes(StandardCharsets.UTF_8));
ctx.channel().writeAndFlush(buff);
- log.info("通过Tcp推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
+ log.info("通过Flume推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
}
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
index b786666..0702199 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
@@ -1,6 +1,7 @@
package com.casic.missiles.frame.base;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
import com.casic.missiles.frame.tag.config.DateTimeTag;
import com.casic.missiles.model.DeviceBizData;
import lombok.Data;
@@ -61,6 +62,14 @@
return false;
}
+ public boolean needPushToApplication() {
+ return true;
+ }
+
+ public boolean hasSensorStartupTag() {
+ return getTagList().containsKey(SensorStartupTag.class.getSimpleName());
+ }
+
public List convertToBizDataList() {
return new ArrayList<>();
}
@@ -75,7 +84,15 @@
public void doParseBizTag() {}
public void replyPduType() {
+ StringBuilder pduType;
+ int pduValue = Integer.parseInt(operationType) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
+ pduType = new StringBuilder(Integer.toHexString(pduValue));
+ while (pduType.length() != 4) {
+ pduType.insert(0, "0");
+ }
+
+ this.setPduType(pduType.toString().toUpperCase());
}
public void replyBizTag() {
@@ -87,5 +104,4 @@
tags.add(dateTimeTag);
tagList.put(DateTimeTag.class.getSimpleName(), tags);
}
-
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
new file mode 100644
index 0000000..8a30fc2
--- /dev/null
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.frame.base;
+
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+
+import java.time.format.DateTimeFormatter;
+
+public class BirmmStartupRequestFrame extends BirmmBaseFrame {
+
+ public final String MESSAGE_TYPE = "Startup";
+
+ @Override
+ public JSONObject toJSON() {
+ JSONObject json = super.toJSON();
+
+ JSONObject body = new JSONObject();
+ json.put("mType", MESSAGE_TYPE);
+ body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+ if (getTagList().containsKey(SensorStartupTag.class.getSimpleName())) {
+ SensorStartupTag tag = (SensorStartupTag) getTagList().get(SensorStartupTag.class.getSimpleName()).get(0);
+ body.put("imei", tag.getImei());
+ body.put("iccid", tag.getIccid());
+ }
+
+ json.put("mBody", body);
+
+ return json;
+ }
+
+ @Override
+ public boolean needPushToApplication() {
+ return false;
+ }
+}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
index e758e82..bbe5fa9 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
@@ -2,6 +2,7 @@
import com.casic.missiles.enums.BirmmOperationTypeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
+import com.casic.missiles.util.SpringContextUtil;
public class MethaneFrameBuilderFactory {
@@ -9,17 +10,25 @@
BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType);
if (operation != null) {
switch (operation) {
- case DOWN_GET_REQUEST:
- return new MethaneGetRequestFrame();
+ case UP_GET_REQUEST:
+ // GetRequest 设备请求 远程升级的数据包
+ return SpringContextUtil.getBean(MethaneGetRequestFrame.class);
case UP_TRAP_REQUEST:
- return new MethaneTrapRequestFrame();
+ // TrapRequest 设备上报数据
+ return SpringContextUtil.getBean(MethaneTrapRequestFrame.class);
case UP_ONLINE_REQUEST:
- return new MethaneOnlineRequestFrame();
+ // OnlineRequest 设备检查是否需要远程升级
+ return SpringContextUtil.getBean(MethaneOnlineRequestFrame.class);
+
+ case UP_STARTUP_REQUEST:
+ // StartupRequest 设备开机上报三码
+ return SpringContextUtil.getBean(MethaneStartupRequestFrame.class);
case UP_SET_RESPONSE:
- return new MethaneSetResponseFrame();
+ // SetResponse 设备回复配置
+ return SpringContextUtil.getBean(MethaneSetResponseFrame.class);
default:
return null;
@@ -31,25 +40,38 @@
public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) {
BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType);
+ BirmmBaseFrame reply = null;
if (operation != null) {
switch (operation) {
- case DOWN_GET_REQUEST:
+ case UP_GET_REQUEST:
// GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件
- return new MethaneGetResponseFrame();
+ reply = SpringContextUtil.getBean(MethaneGetResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_GET_RESPONSE.getValue());
+ break;
case UP_TRAP_REQUEST:
- // TRAP_REQUEST消息回复TRAP_RESPONSE
- return new MethaneTrapResponseFrame();
+ // TRAP_REQUEST消息回复TRAP_RESPONSE 回复数据上报
+ reply = SpringContextUtil.getBean(MethaneTrapResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_TRAP_RESPONSE.getValue());
+ break;
case UP_ONLINE_REQUEST:
- // ONLINE_REQUEST消息回复ONLINE_RESPONSE
- return new MethaneOnlineResponseFrame();
+ // ONLINE_REQUEST消息回复ONLINE_RESPONSE 回复是否远程升级
+ reply = SpringContextUtil.getBean(MethaneOnlineResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_ONLINE_RESPONSE.getValue());
+ break;
+
+ case UP_SET_RESPONSE:
+ // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码
+ reply = SpringContextUtil.getBean(MethaneStartupResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_STARTUP_RESPONSE.getValue());
+ break;
default:
return null;
}
- } else {
- return null;
}
+
+ return reply;
}
}
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
index 02f1291..dabfe36 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
@@ -22,20 +22,11 @@
@Component
public class SensorhubServerChannelInitialHandler extends ChannelInitializer {
- @Resource
- BirmmHexDecoder birmmHexDecoder;
-
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new LoggingHandler(LogLevel.INFO));
-// pipeline.addLast(new SensorhubDecoder());
-// pipeline.addLast(birmmHexDecoder);
+
pipeline.addLast(new BirmmHexDecoder());
pipeline.addLast(new CommonHexReplier());
-// 心跳续约
-// pipeline.addLast(this.heartBeatRespHandler);
-// pipeline.addLast(this.loginAuthRespHandler); 登录验证
-// pipeline.addLast(this.chatRespHandler); 对话处理器
}
}
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
index 838ae44..d2921af 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
@@ -1,15 +1,14 @@
package com.casic.missiles.parser;
-import cn.hutool.http.HttpUtil;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.model.DeviceBizData;
import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.service.IDeviceBizDataService;
import com.casic.missiles.service.IDeviceFrameLogService;
import com.casic.missiles.service.IGeneralService;
import com.casic.missiles.service.impl.DeviceBizDataServiceImpl;
import com.casic.missiles.service.impl.DeviceFrameLogServiceImpl;
+import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.util.SnowflakeUtil;
import com.casic.missiles.util.SpringContextUtil;
import io.netty.buffer.ByteBuf;
@@ -61,14 +60,7 @@
log.info("上行HEX字节消息解析成功:{}", birmmFrame.toJSON().toJSONString());
// 保存日志
- DeviceFrameLog frameLog = new DeviceFrameLog();
- frameLog.setId(new SnowflakeUtil().nextId());
- frameLog.setDevcode(birmmFrame.getDevCode());
- frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase());
- frameLog.setRawBizFrame(birmmFrame.getRawBizFrameString());
- frameLog.setDataJson(birmmFrame.toJSON().toJSONString());
- frameLog.setLogtime(birmmFrame.getLogTime());
- frameLogService.save(frameLog);
+ Long logId = defaultService.saveFrameLog(birmmFrame, frameBytes);
// 推送
// 需要异步推
@@ -76,18 +68,12 @@
// 保存业务数据
if (birmmFrame.isBizDataFrame()) {
- List bizDataList = birmmFrame.convertToBizDataList();
- for (DeviceBizData bizData : bizDataList) {
- // 设置其他的属性
- bizData.setId(new SnowflakeUtil().nextId());
- bizData.setFrameLogId(frameLog.getId()); // 关联日志记录id
- bizData.setDevcode(birmmFrame.getDevCode());
- bizData.setDeviceType(Integer.valueOf(birmmFrame.getDeviceType()));
- bizData.setLogtime(birmmFrame.getLogTime());
- }
+ defaultService.saveBizData(birmmFrame, logId);
+ }
- // 批量保存
- bizDataService.saveBatch(bizDataList);
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
}
// 创建回复消息
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
index 6fa8cce..eef7b55 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
@@ -30,7 +30,7 @@
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, Object obj) throws Exception {
- System.out.println("Client->Server:" + obj);
+// System.out.println("Client->Server:" + obj);
byte[] replyBytes = BytesUtil.hexStringToBytes(obj.toString());
ByteBuf replyByteBuf = Unpooled.copiedBuffer(replyBytes);
//进行回复
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
index cb5ab89..bd1b402 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
@@ -16,6 +16,8 @@
Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes);
void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId);
+ void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame);
+
void pushMessage(BirmmBaseFrame birmmFrame);
/**
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
index 9b1353d..704c540 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
@@ -5,10 +5,8 @@
import com.casic.missiles.enums.BirmmFrameAttributeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.frame.BirmmFrameBuilderFactory;
-import com.casic.missiles.model.Device;
-import com.casic.missiles.model.DeviceBizData;
-import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.model.SubscribeStore;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+import com.casic.missiles.model.*;
import com.casic.missiles.parser.BirmmProtocolParser;
import com.casic.missiles.parser.safe.SafeStrategy;
import com.casic.missiles.parser.safe.impl.Sm4;
@@ -154,7 +152,20 @@
}
@Override
+ public void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame) {
+ List imeiTags = baseFrame.getTagList().get(SensorStartupTag.class.getSimpleName());
+ if (ObjectUtil.isNotNull(imeiTags) && !imeiTags.isEmpty()) {
+ SensorStartupTag imeiTag = (SensorStartupTag) imeiTags.get(0);
+ deviceService.updateDeviceImei(baseFrame.getDevCode(), imeiTag.getImei(), imeiTag.getIccid());
+ }
+ }
+
+ @Override
public void pushMessage(BirmmBaseFrame birmmFrame) {
+ if (!birmmFrame.needPushToApplication()) {
+ return ;
+ }
+
Device device = deviceService.getDeviceByDeviceCode(birmmFrame.getDevCode());
if (ObjectUtil.isNotNull(device) && ObjectUtil.isNotNull(device.getGroupId())) {
List ssList = subscribeService.getSubscribeListByProduct(device.getGroupId());
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
index 26c13ec..acfa22f 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
@@ -93,6 +93,6 @@
buff.writeBytes(msg.getBytes(StandardCharsets.UTF_8));
ctx.channel().writeAndFlush(buff);
- log.info("通过Tcp推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
+ log.info("通过Flume推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
}
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
index b786666..0702199 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
@@ -1,6 +1,7 @@
package com.casic.missiles.frame.base;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
import com.casic.missiles.frame.tag.config.DateTimeTag;
import com.casic.missiles.model.DeviceBizData;
import lombok.Data;
@@ -61,6 +62,14 @@
return false;
}
+ public boolean needPushToApplication() {
+ return true;
+ }
+
+ public boolean hasSensorStartupTag() {
+ return getTagList().containsKey(SensorStartupTag.class.getSimpleName());
+ }
+
public List convertToBizDataList() {
return new ArrayList<>();
}
@@ -75,7 +84,15 @@
public void doParseBizTag() {}
public void replyPduType() {
+ StringBuilder pduType;
+ int pduValue = Integer.parseInt(operationType) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
+ pduType = new StringBuilder(Integer.toHexString(pduValue));
+ while (pduType.length() != 4) {
+ pduType.insert(0, "0");
+ }
+
+ this.setPduType(pduType.toString().toUpperCase());
}
public void replyBizTag() {
@@ -87,5 +104,4 @@
tags.add(dateTimeTag);
tagList.put(DateTimeTag.class.getSimpleName(), tags);
}
-
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
new file mode 100644
index 0000000..8a30fc2
--- /dev/null
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.frame.base;
+
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+
+import java.time.format.DateTimeFormatter;
+
+public class BirmmStartupRequestFrame extends BirmmBaseFrame {
+
+ public final String MESSAGE_TYPE = "Startup";
+
+ @Override
+ public JSONObject toJSON() {
+ JSONObject json = super.toJSON();
+
+ JSONObject body = new JSONObject();
+ json.put("mType", MESSAGE_TYPE);
+ body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+ if (getTagList().containsKey(SensorStartupTag.class.getSimpleName())) {
+ SensorStartupTag tag = (SensorStartupTag) getTagList().get(SensorStartupTag.class.getSimpleName()).get(0);
+ body.put("imei", tag.getImei());
+ body.put("iccid", tag.getIccid());
+ }
+
+ json.put("mBody", body);
+
+ return json;
+ }
+
+ @Override
+ public boolean needPushToApplication() {
+ return false;
+ }
+}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
index e758e82..bbe5fa9 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
@@ -2,6 +2,7 @@
import com.casic.missiles.enums.BirmmOperationTypeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
+import com.casic.missiles.util.SpringContextUtil;
public class MethaneFrameBuilderFactory {
@@ -9,17 +10,25 @@
BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType);
if (operation != null) {
switch (operation) {
- case DOWN_GET_REQUEST:
- return new MethaneGetRequestFrame();
+ case UP_GET_REQUEST:
+ // GetRequest 设备请求 远程升级的数据包
+ return SpringContextUtil.getBean(MethaneGetRequestFrame.class);
case UP_TRAP_REQUEST:
- return new MethaneTrapRequestFrame();
+ // TrapRequest 设备上报数据
+ return SpringContextUtil.getBean(MethaneTrapRequestFrame.class);
case UP_ONLINE_REQUEST:
- return new MethaneOnlineRequestFrame();
+ // OnlineRequest 设备检查是否需要远程升级
+ return SpringContextUtil.getBean(MethaneOnlineRequestFrame.class);
+
+ case UP_STARTUP_REQUEST:
+ // StartupRequest 设备开机上报三码
+ return SpringContextUtil.getBean(MethaneStartupRequestFrame.class);
case UP_SET_RESPONSE:
- return new MethaneSetResponseFrame();
+ // SetResponse 设备回复配置
+ return SpringContextUtil.getBean(MethaneSetResponseFrame.class);
default:
return null;
@@ -31,25 +40,38 @@
public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) {
BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType);
+ BirmmBaseFrame reply = null;
if (operation != null) {
switch (operation) {
- case DOWN_GET_REQUEST:
+ case UP_GET_REQUEST:
// GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件
- return new MethaneGetResponseFrame();
+ reply = SpringContextUtil.getBean(MethaneGetResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_GET_RESPONSE.getValue());
+ break;
case UP_TRAP_REQUEST:
- // TRAP_REQUEST消息回复TRAP_RESPONSE
- return new MethaneTrapResponseFrame();
+ // TRAP_REQUEST消息回复TRAP_RESPONSE 回复数据上报
+ reply = SpringContextUtil.getBean(MethaneTrapResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_TRAP_RESPONSE.getValue());
+ break;
case UP_ONLINE_REQUEST:
- // ONLINE_REQUEST消息回复ONLINE_RESPONSE
- return new MethaneOnlineResponseFrame();
+ // ONLINE_REQUEST消息回复ONLINE_RESPONSE 回复是否远程升级
+ reply = SpringContextUtil.getBean(MethaneOnlineResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_ONLINE_RESPONSE.getValue());
+ break;
+
+ case UP_SET_RESPONSE:
+ // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码
+ reply = SpringContextUtil.getBean(MethaneStartupResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_STARTUP_RESPONSE.getValue());
+ break;
default:
return null;
}
- } else {
- return null;
}
+
+ return reply;
}
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
index 92e93af..a57c1ab 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
@@ -6,9 +6,11 @@
import com.casic.missiles.frame.tag.ota.RequestOffsetTag;
import com.casic.missiles.frame.tag.ota.RequestSizeTag;
import com.casic.missiles.frame.tag.signal.PCITag;
+import org.springframework.stereotype.Component;
import java.time.format.DateTimeFormatter;
+@Component("MethaneGetRequest")
public class MethaneGetRequestFrame extends BirmmBaseFrame {
private final String DEV_TYPE = "Methane";
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
index 02f1291..dabfe36 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
@@ -22,20 +22,11 @@
@Component
public class SensorhubServerChannelInitialHandler extends ChannelInitializer {
- @Resource
- BirmmHexDecoder birmmHexDecoder;
-
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new LoggingHandler(LogLevel.INFO));
-// pipeline.addLast(new SensorhubDecoder());
-// pipeline.addLast(birmmHexDecoder);
+
pipeline.addLast(new BirmmHexDecoder());
pipeline.addLast(new CommonHexReplier());
-// 心跳续约
-// pipeline.addLast(this.heartBeatRespHandler);
-// pipeline.addLast(this.loginAuthRespHandler); 登录验证
-// pipeline.addLast(this.chatRespHandler); 对话处理器
}
}
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
index 838ae44..d2921af 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
@@ -1,15 +1,14 @@
package com.casic.missiles.parser;
-import cn.hutool.http.HttpUtil;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.model.DeviceBizData;
import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.service.IDeviceBizDataService;
import com.casic.missiles.service.IDeviceFrameLogService;
import com.casic.missiles.service.IGeneralService;
import com.casic.missiles.service.impl.DeviceBizDataServiceImpl;
import com.casic.missiles.service.impl.DeviceFrameLogServiceImpl;
+import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.util.SnowflakeUtil;
import com.casic.missiles.util.SpringContextUtil;
import io.netty.buffer.ByteBuf;
@@ -61,14 +60,7 @@
log.info("上行HEX字节消息解析成功:{}", birmmFrame.toJSON().toJSONString());
// 保存日志
- DeviceFrameLog frameLog = new DeviceFrameLog();
- frameLog.setId(new SnowflakeUtil().nextId());
- frameLog.setDevcode(birmmFrame.getDevCode());
- frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase());
- frameLog.setRawBizFrame(birmmFrame.getRawBizFrameString());
- frameLog.setDataJson(birmmFrame.toJSON().toJSONString());
- frameLog.setLogtime(birmmFrame.getLogTime());
- frameLogService.save(frameLog);
+ Long logId = defaultService.saveFrameLog(birmmFrame, frameBytes);
// 推送
// 需要异步推
@@ -76,18 +68,12 @@
// 保存业务数据
if (birmmFrame.isBizDataFrame()) {
- List bizDataList = birmmFrame.convertToBizDataList();
- for (DeviceBizData bizData : bizDataList) {
- // 设置其他的属性
- bizData.setId(new SnowflakeUtil().nextId());
- bizData.setFrameLogId(frameLog.getId()); // 关联日志记录id
- bizData.setDevcode(birmmFrame.getDevCode());
- bizData.setDeviceType(Integer.valueOf(birmmFrame.getDeviceType()));
- bizData.setLogtime(birmmFrame.getLogTime());
- }
+ defaultService.saveBizData(birmmFrame, logId);
+ }
- // 批量保存
- bizDataService.saveBatch(bizDataList);
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
}
// 创建回复消息
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
index 6fa8cce..eef7b55 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
@@ -30,7 +30,7 @@
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, Object obj) throws Exception {
- System.out.println("Client->Server:" + obj);
+// System.out.println("Client->Server:" + obj);
byte[] replyBytes = BytesUtil.hexStringToBytes(obj.toString());
ByteBuf replyByteBuf = Unpooled.copiedBuffer(replyBytes);
//进行回复
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
index cb5ab89..bd1b402 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
@@ -16,6 +16,8 @@
Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes);
void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId);
+ void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame);
+
void pushMessage(BirmmBaseFrame birmmFrame);
/**
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
index 9b1353d..704c540 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
@@ -5,10 +5,8 @@
import com.casic.missiles.enums.BirmmFrameAttributeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.frame.BirmmFrameBuilderFactory;
-import com.casic.missiles.model.Device;
-import com.casic.missiles.model.DeviceBizData;
-import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.model.SubscribeStore;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+import com.casic.missiles.model.*;
import com.casic.missiles.parser.BirmmProtocolParser;
import com.casic.missiles.parser.safe.SafeStrategy;
import com.casic.missiles.parser.safe.impl.Sm4;
@@ -154,7 +152,20 @@
}
@Override
+ public void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame) {
+ List imeiTags = baseFrame.getTagList().get(SensorStartupTag.class.getSimpleName());
+ if (ObjectUtil.isNotNull(imeiTags) && !imeiTags.isEmpty()) {
+ SensorStartupTag imeiTag = (SensorStartupTag) imeiTags.get(0);
+ deviceService.updateDeviceImei(baseFrame.getDevCode(), imeiTag.getImei(), imeiTag.getIccid());
+ }
+ }
+
+ @Override
public void pushMessage(BirmmBaseFrame birmmFrame) {
+ if (!birmmFrame.needPushToApplication()) {
+ return ;
+ }
+
Device device = deviceService.getDeviceByDeviceCode(birmmFrame.getDevCode());
if (ObjectUtil.isNotNull(device) && ObjectUtil.isNotNull(device.getGroupId())) {
List ssList = subscribeService.getSubscribeListByProduct(device.getGroupId());
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
index 26c13ec..acfa22f 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
@@ -93,6 +93,6 @@
buff.writeBytes(msg.getBytes(StandardCharsets.UTF_8));
ctx.channel().writeAndFlush(buff);
- log.info("通过Tcp推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
+ log.info("通过Flume推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
}
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
index b786666..0702199 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
@@ -1,6 +1,7 @@
package com.casic.missiles.frame.base;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
import com.casic.missiles.frame.tag.config.DateTimeTag;
import com.casic.missiles.model.DeviceBizData;
import lombok.Data;
@@ -61,6 +62,14 @@
return false;
}
+ public boolean needPushToApplication() {
+ return true;
+ }
+
+ public boolean hasSensorStartupTag() {
+ return getTagList().containsKey(SensorStartupTag.class.getSimpleName());
+ }
+
public List convertToBizDataList() {
return new ArrayList<>();
}
@@ -75,7 +84,15 @@
public void doParseBizTag() {}
public void replyPduType() {
+ StringBuilder pduType;
+ int pduValue = Integer.parseInt(operationType) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
+ pduType = new StringBuilder(Integer.toHexString(pduValue));
+ while (pduType.length() != 4) {
+ pduType.insert(0, "0");
+ }
+
+ this.setPduType(pduType.toString().toUpperCase());
}
public void replyBizTag() {
@@ -87,5 +104,4 @@
tags.add(dateTimeTag);
tagList.put(DateTimeTag.class.getSimpleName(), tags);
}
-
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
new file mode 100644
index 0000000..8a30fc2
--- /dev/null
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.frame.base;
+
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+
+import java.time.format.DateTimeFormatter;
+
+public class BirmmStartupRequestFrame extends BirmmBaseFrame {
+
+ public final String MESSAGE_TYPE = "Startup";
+
+ @Override
+ public JSONObject toJSON() {
+ JSONObject json = super.toJSON();
+
+ JSONObject body = new JSONObject();
+ json.put("mType", MESSAGE_TYPE);
+ body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+ if (getTagList().containsKey(SensorStartupTag.class.getSimpleName())) {
+ SensorStartupTag tag = (SensorStartupTag) getTagList().get(SensorStartupTag.class.getSimpleName()).get(0);
+ body.put("imei", tag.getImei());
+ body.put("iccid", tag.getIccid());
+ }
+
+ json.put("mBody", body);
+
+ return json;
+ }
+
+ @Override
+ public boolean needPushToApplication() {
+ return false;
+ }
+}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
index e758e82..bbe5fa9 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
@@ -2,6 +2,7 @@
import com.casic.missiles.enums.BirmmOperationTypeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
+import com.casic.missiles.util.SpringContextUtil;
public class MethaneFrameBuilderFactory {
@@ -9,17 +10,25 @@
BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType);
if (operation != null) {
switch (operation) {
- case DOWN_GET_REQUEST:
- return new MethaneGetRequestFrame();
+ case UP_GET_REQUEST:
+ // GetRequest 设备请求 远程升级的数据包
+ return SpringContextUtil.getBean(MethaneGetRequestFrame.class);
case UP_TRAP_REQUEST:
- return new MethaneTrapRequestFrame();
+ // TrapRequest 设备上报数据
+ return SpringContextUtil.getBean(MethaneTrapRequestFrame.class);
case UP_ONLINE_REQUEST:
- return new MethaneOnlineRequestFrame();
+ // OnlineRequest 设备检查是否需要远程升级
+ return SpringContextUtil.getBean(MethaneOnlineRequestFrame.class);
+
+ case UP_STARTUP_REQUEST:
+ // StartupRequest 设备开机上报三码
+ return SpringContextUtil.getBean(MethaneStartupRequestFrame.class);
case UP_SET_RESPONSE:
- return new MethaneSetResponseFrame();
+ // SetResponse 设备回复配置
+ return SpringContextUtil.getBean(MethaneSetResponseFrame.class);
default:
return null;
@@ -31,25 +40,38 @@
public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) {
BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType);
+ BirmmBaseFrame reply = null;
if (operation != null) {
switch (operation) {
- case DOWN_GET_REQUEST:
+ case UP_GET_REQUEST:
// GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件
- return new MethaneGetResponseFrame();
+ reply = SpringContextUtil.getBean(MethaneGetResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_GET_RESPONSE.getValue());
+ break;
case UP_TRAP_REQUEST:
- // TRAP_REQUEST消息回复TRAP_RESPONSE
- return new MethaneTrapResponseFrame();
+ // TRAP_REQUEST消息回复TRAP_RESPONSE 回复数据上报
+ reply = SpringContextUtil.getBean(MethaneTrapResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_TRAP_RESPONSE.getValue());
+ break;
case UP_ONLINE_REQUEST:
- // ONLINE_REQUEST消息回复ONLINE_RESPONSE
- return new MethaneOnlineResponseFrame();
+ // ONLINE_REQUEST消息回复ONLINE_RESPONSE 回复是否远程升级
+ reply = SpringContextUtil.getBean(MethaneOnlineResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_ONLINE_RESPONSE.getValue());
+ break;
+
+ case UP_SET_RESPONSE:
+ // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码
+ reply = SpringContextUtil.getBean(MethaneStartupResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_STARTUP_RESPONSE.getValue());
+ break;
default:
return null;
}
- } else {
- return null;
}
+
+ return reply;
}
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
index 92e93af..a57c1ab 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
@@ -6,9 +6,11 @@
import com.casic.missiles.frame.tag.ota.RequestOffsetTag;
import com.casic.missiles.frame.tag.ota.RequestSizeTag;
import com.casic.missiles.frame.tag.signal.PCITag;
+import org.springframework.stereotype.Component;
import java.time.format.DateTimeFormatter;
+@Component("MethaneGetRequest")
public class MethaneGetRequestFrame extends BirmmBaseFrame {
private final String DEV_TYPE = "Methane";
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java
deleted file mode 100644
index bd707fa..0000000
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.casic.missiles.frame.methane;
-
-import com.casic.missiles.enums.BirmmOperationTypeEnums;
-import com.casic.missiles.frame.base.BirmmBaseFrame;
-import com.casic.missiles.frame.base.BirmmBaseTag;
-import com.casic.missiles.frame.tag.ota.PackageDataTag;
-import com.casic.missiles.frame.tag.ota.RequestOffsetTag;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class MethaneGetResponseFrame extends BirmmBaseFrame {
-
- @Override
- public void replyPduType() {
- StringBuilder pduType;
-
- int pduValue = Integer.parseInt(BirmmOperationTypeEnums.UP_GET_RESPONSE.getValue()) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
- pduType = new StringBuilder(Integer.toHexString(pduValue));
- while (pduType.length() != 4) {
- pduType.insert(0, "0");
- }
-
- this.setPduType(pduType.toString());
- }
-
- @Override
- public void replyBizTag() {
- // 回复升级包 RequestOffsetTag + PackageDataTag(需要请求的RequestOffsetTag + RequestSizeTag)
- // TODO-LIST
-
- Map> tagList = new HashMap<>();
-
- RequestOffsetTag offsetTag = new RequestOffsetTag();
- offsetTag.setRequestOffset(0);
- List offsetTags = new ArrayList<>();
- offsetTags.add(offsetTag);
- tagList.put(RequestOffsetTag.class.getSimpleName(), offsetTags);
-
- PackageDataTag dataTag = new PackageDataTag();
- dataTag.setData(new byte[] {0});
- List dataTags = new ArrayList<>();
- dataTags.add(dataTag);
- tagList.put(PackageDataTag.class.getSimpleName(), dataTags);
-
- super.setTagList(tagList);
- }
-}
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
index 02f1291..dabfe36 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
@@ -22,20 +22,11 @@
@Component
public class SensorhubServerChannelInitialHandler extends ChannelInitializer {
- @Resource
- BirmmHexDecoder birmmHexDecoder;
-
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new LoggingHandler(LogLevel.INFO));
-// pipeline.addLast(new SensorhubDecoder());
-// pipeline.addLast(birmmHexDecoder);
+
pipeline.addLast(new BirmmHexDecoder());
pipeline.addLast(new CommonHexReplier());
-// 心跳续约
-// pipeline.addLast(this.heartBeatRespHandler);
-// pipeline.addLast(this.loginAuthRespHandler); 登录验证
-// pipeline.addLast(this.chatRespHandler); 对话处理器
}
}
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
index 838ae44..d2921af 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
@@ -1,15 +1,14 @@
package com.casic.missiles.parser;
-import cn.hutool.http.HttpUtil;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.model.DeviceBizData;
import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.service.IDeviceBizDataService;
import com.casic.missiles.service.IDeviceFrameLogService;
import com.casic.missiles.service.IGeneralService;
import com.casic.missiles.service.impl.DeviceBizDataServiceImpl;
import com.casic.missiles.service.impl.DeviceFrameLogServiceImpl;
+import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.util.SnowflakeUtil;
import com.casic.missiles.util.SpringContextUtil;
import io.netty.buffer.ByteBuf;
@@ -61,14 +60,7 @@
log.info("上行HEX字节消息解析成功:{}", birmmFrame.toJSON().toJSONString());
// 保存日志
- DeviceFrameLog frameLog = new DeviceFrameLog();
- frameLog.setId(new SnowflakeUtil().nextId());
- frameLog.setDevcode(birmmFrame.getDevCode());
- frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase());
- frameLog.setRawBizFrame(birmmFrame.getRawBizFrameString());
- frameLog.setDataJson(birmmFrame.toJSON().toJSONString());
- frameLog.setLogtime(birmmFrame.getLogTime());
- frameLogService.save(frameLog);
+ Long logId = defaultService.saveFrameLog(birmmFrame, frameBytes);
// 推送
// 需要异步推
@@ -76,18 +68,12 @@
// 保存业务数据
if (birmmFrame.isBizDataFrame()) {
- List bizDataList = birmmFrame.convertToBizDataList();
- for (DeviceBizData bizData : bizDataList) {
- // 设置其他的属性
- bizData.setId(new SnowflakeUtil().nextId());
- bizData.setFrameLogId(frameLog.getId()); // 关联日志记录id
- bizData.setDevcode(birmmFrame.getDevCode());
- bizData.setDeviceType(Integer.valueOf(birmmFrame.getDeviceType()));
- bizData.setLogtime(birmmFrame.getLogTime());
- }
+ defaultService.saveBizData(birmmFrame, logId);
+ }
- // 批量保存
- bizDataService.saveBatch(bizDataList);
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
}
// 创建回复消息
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
index 6fa8cce..eef7b55 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
@@ -30,7 +30,7 @@
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, Object obj) throws Exception {
- System.out.println("Client->Server:" + obj);
+// System.out.println("Client->Server:" + obj);
byte[] replyBytes = BytesUtil.hexStringToBytes(obj.toString());
ByteBuf replyByteBuf = Unpooled.copiedBuffer(replyBytes);
//进行回复
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
index cb5ab89..bd1b402 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
@@ -16,6 +16,8 @@
Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes);
void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId);
+ void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame);
+
void pushMessage(BirmmBaseFrame birmmFrame);
/**
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
index 9b1353d..704c540 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
@@ -5,10 +5,8 @@
import com.casic.missiles.enums.BirmmFrameAttributeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.frame.BirmmFrameBuilderFactory;
-import com.casic.missiles.model.Device;
-import com.casic.missiles.model.DeviceBizData;
-import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.model.SubscribeStore;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+import com.casic.missiles.model.*;
import com.casic.missiles.parser.BirmmProtocolParser;
import com.casic.missiles.parser.safe.SafeStrategy;
import com.casic.missiles.parser.safe.impl.Sm4;
@@ -154,7 +152,20 @@
}
@Override
+ public void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame) {
+ List imeiTags = baseFrame.getTagList().get(SensorStartupTag.class.getSimpleName());
+ if (ObjectUtil.isNotNull(imeiTags) && !imeiTags.isEmpty()) {
+ SensorStartupTag imeiTag = (SensorStartupTag) imeiTags.get(0);
+ deviceService.updateDeviceImei(baseFrame.getDevCode(), imeiTag.getImei(), imeiTag.getIccid());
+ }
+ }
+
+ @Override
public void pushMessage(BirmmBaseFrame birmmFrame) {
+ if (!birmmFrame.needPushToApplication()) {
+ return ;
+ }
+
Device device = deviceService.getDeviceByDeviceCode(birmmFrame.getDevCode());
if (ObjectUtil.isNotNull(device) && ObjectUtil.isNotNull(device.getGroupId())) {
List ssList = subscribeService.getSubscribeListByProduct(device.getGroupId());
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
index 26c13ec..acfa22f 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
@@ -93,6 +93,6 @@
buff.writeBytes(msg.getBytes(StandardCharsets.UTF_8));
ctx.channel().writeAndFlush(buff);
- log.info("通过Tcp推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
+ log.info("通过Flume推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
}
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
index b786666..0702199 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
@@ -1,6 +1,7 @@
package com.casic.missiles.frame.base;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
import com.casic.missiles.frame.tag.config.DateTimeTag;
import com.casic.missiles.model.DeviceBizData;
import lombok.Data;
@@ -61,6 +62,14 @@
return false;
}
+ public boolean needPushToApplication() {
+ return true;
+ }
+
+ public boolean hasSensorStartupTag() {
+ return getTagList().containsKey(SensorStartupTag.class.getSimpleName());
+ }
+
public List convertToBizDataList() {
return new ArrayList<>();
}
@@ -75,7 +84,15 @@
public void doParseBizTag() {}
public void replyPduType() {
+ StringBuilder pduType;
+ int pduValue = Integer.parseInt(operationType) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
+ pduType = new StringBuilder(Integer.toHexString(pduValue));
+ while (pduType.length() != 4) {
+ pduType.insert(0, "0");
+ }
+
+ this.setPduType(pduType.toString().toUpperCase());
}
public void replyBizTag() {
@@ -87,5 +104,4 @@
tags.add(dateTimeTag);
tagList.put(DateTimeTag.class.getSimpleName(), tags);
}
-
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
new file mode 100644
index 0000000..8a30fc2
--- /dev/null
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.frame.base;
+
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+
+import java.time.format.DateTimeFormatter;
+
+public class BirmmStartupRequestFrame extends BirmmBaseFrame {
+
+ public final String MESSAGE_TYPE = "Startup";
+
+ @Override
+ public JSONObject toJSON() {
+ JSONObject json = super.toJSON();
+
+ JSONObject body = new JSONObject();
+ json.put("mType", MESSAGE_TYPE);
+ body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+ if (getTagList().containsKey(SensorStartupTag.class.getSimpleName())) {
+ SensorStartupTag tag = (SensorStartupTag) getTagList().get(SensorStartupTag.class.getSimpleName()).get(0);
+ body.put("imei", tag.getImei());
+ body.put("iccid", tag.getIccid());
+ }
+
+ json.put("mBody", body);
+
+ return json;
+ }
+
+ @Override
+ public boolean needPushToApplication() {
+ return false;
+ }
+}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
index e758e82..bbe5fa9 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
@@ -2,6 +2,7 @@
import com.casic.missiles.enums.BirmmOperationTypeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
+import com.casic.missiles.util.SpringContextUtil;
public class MethaneFrameBuilderFactory {
@@ -9,17 +10,25 @@
BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType);
if (operation != null) {
switch (operation) {
- case DOWN_GET_REQUEST:
- return new MethaneGetRequestFrame();
+ case UP_GET_REQUEST:
+ // GetRequest 设备请求 远程升级的数据包
+ return SpringContextUtil.getBean(MethaneGetRequestFrame.class);
case UP_TRAP_REQUEST:
- return new MethaneTrapRequestFrame();
+ // TrapRequest 设备上报数据
+ return SpringContextUtil.getBean(MethaneTrapRequestFrame.class);
case UP_ONLINE_REQUEST:
- return new MethaneOnlineRequestFrame();
+ // OnlineRequest 设备检查是否需要远程升级
+ return SpringContextUtil.getBean(MethaneOnlineRequestFrame.class);
+
+ case UP_STARTUP_REQUEST:
+ // StartupRequest 设备开机上报三码
+ return SpringContextUtil.getBean(MethaneStartupRequestFrame.class);
case UP_SET_RESPONSE:
- return new MethaneSetResponseFrame();
+ // SetResponse 设备回复配置
+ return SpringContextUtil.getBean(MethaneSetResponseFrame.class);
default:
return null;
@@ -31,25 +40,38 @@
public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) {
BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType);
+ BirmmBaseFrame reply = null;
if (operation != null) {
switch (operation) {
- case DOWN_GET_REQUEST:
+ case UP_GET_REQUEST:
// GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件
- return new MethaneGetResponseFrame();
+ reply = SpringContextUtil.getBean(MethaneGetResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_GET_RESPONSE.getValue());
+ break;
case UP_TRAP_REQUEST:
- // TRAP_REQUEST消息回复TRAP_RESPONSE
- return new MethaneTrapResponseFrame();
+ // TRAP_REQUEST消息回复TRAP_RESPONSE 回复数据上报
+ reply = SpringContextUtil.getBean(MethaneTrapResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_TRAP_RESPONSE.getValue());
+ break;
case UP_ONLINE_REQUEST:
- // ONLINE_REQUEST消息回复ONLINE_RESPONSE
- return new MethaneOnlineResponseFrame();
+ // ONLINE_REQUEST消息回复ONLINE_RESPONSE 回复是否远程升级
+ reply = SpringContextUtil.getBean(MethaneOnlineResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_ONLINE_RESPONSE.getValue());
+ break;
+
+ case UP_SET_RESPONSE:
+ // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码
+ reply = SpringContextUtil.getBean(MethaneStartupResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_STARTUP_RESPONSE.getValue());
+ break;
default:
return null;
}
- } else {
- return null;
}
+
+ return reply;
}
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
index 92e93af..a57c1ab 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
@@ -6,9 +6,11 @@
import com.casic.missiles.frame.tag.ota.RequestOffsetTag;
import com.casic.missiles.frame.tag.ota.RequestSizeTag;
import com.casic.missiles.frame.tag.signal.PCITag;
+import org.springframework.stereotype.Component;
import java.time.format.DateTimeFormatter;
+@Component("MethaneGetRequest")
public class MethaneGetRequestFrame extends BirmmBaseFrame {
private final String DEV_TYPE = "Methane";
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java
deleted file mode 100644
index bd707fa..0000000
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.casic.missiles.frame.methane;
-
-import com.casic.missiles.enums.BirmmOperationTypeEnums;
-import com.casic.missiles.frame.base.BirmmBaseFrame;
-import com.casic.missiles.frame.base.BirmmBaseTag;
-import com.casic.missiles.frame.tag.ota.PackageDataTag;
-import com.casic.missiles.frame.tag.ota.RequestOffsetTag;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class MethaneGetResponseFrame extends BirmmBaseFrame {
-
- @Override
- public void replyPduType() {
- StringBuilder pduType;
-
- int pduValue = Integer.parseInt(BirmmOperationTypeEnums.UP_GET_RESPONSE.getValue()) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
- pduType = new StringBuilder(Integer.toHexString(pduValue));
- while (pduType.length() != 4) {
- pduType.insert(0, "0");
- }
-
- this.setPduType(pduType.toString());
- }
-
- @Override
- public void replyBizTag() {
- // 回复升级包 RequestOffsetTag + PackageDataTag(需要请求的RequestOffsetTag + RequestSizeTag)
- // TODO-LIST
-
- Map> tagList = new HashMap<>();
-
- RequestOffsetTag offsetTag = new RequestOffsetTag();
- offsetTag.setRequestOffset(0);
- List offsetTags = new ArrayList<>();
- offsetTags.add(offsetTag);
- tagList.put(RequestOffsetTag.class.getSimpleName(), offsetTags);
-
- PackageDataTag dataTag = new PackageDataTag();
- dataTag.setData(new byte[] {0});
- List dataTags = new ArrayList<>();
- dataTags.add(dataTag);
- tagList.put(PackageDataTag.class.getSimpleName(), dataTags);
-
- super.setTagList(tagList);
- }
-}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseReply.java
new file mode 100644
index 0000000..605d7d8
--- /dev/null
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseReply.java
@@ -0,0 +1,38 @@
+package com.casic.missiles.frame.methane;
+
+import com.casic.missiles.frame.base.BirmmBaseFrame;
+import com.casic.missiles.frame.base.BirmmBaseTag;
+import com.casic.missiles.frame.tag.ota.PackageDataTag;
+import com.casic.missiles.frame.tag.ota.RequestOffsetTag;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component("MethaneGetResponse")
+public class MethaneGetResponseReply extends BirmmBaseFrame {
+
+ @Override
+ public void replyBizTag() {
+ // 回复升级包 RequestOffsetTag + PackageDataTag(需要请求的RequestOffsetTag + RequestSizeTag)
+ // TODO-LIST
+
+ Map> tagList = new HashMap<>();
+
+ RequestOffsetTag offsetTag = new RequestOffsetTag();
+ offsetTag.setRequestOffset(0);
+ List offsetTags = new ArrayList<>();
+ offsetTags.add(offsetTag);
+ tagList.put(RequestOffsetTag.class.getSimpleName(), offsetTags);
+
+ PackageDataTag dataTag = new PackageDataTag();
+ dataTag.setData(new byte[] {0});
+ List dataTags = new ArrayList<>();
+ dataTags.add(dataTag);
+ tagList.put(PackageDataTag.class.getSimpleName(), dataTags);
+
+ super.setTagList(tagList);
+ }
+}
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
index 02f1291..dabfe36 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
@@ -22,20 +22,11 @@
@Component
public class SensorhubServerChannelInitialHandler extends ChannelInitializer {
- @Resource
- BirmmHexDecoder birmmHexDecoder;
-
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new LoggingHandler(LogLevel.INFO));
-// pipeline.addLast(new SensorhubDecoder());
-// pipeline.addLast(birmmHexDecoder);
+
pipeline.addLast(new BirmmHexDecoder());
pipeline.addLast(new CommonHexReplier());
-// 心跳续约
-// pipeline.addLast(this.heartBeatRespHandler);
-// pipeline.addLast(this.loginAuthRespHandler); 登录验证
-// pipeline.addLast(this.chatRespHandler); 对话处理器
}
}
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
index 838ae44..d2921af 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
@@ -1,15 +1,14 @@
package com.casic.missiles.parser;
-import cn.hutool.http.HttpUtil;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.model.DeviceBizData;
import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.service.IDeviceBizDataService;
import com.casic.missiles.service.IDeviceFrameLogService;
import com.casic.missiles.service.IGeneralService;
import com.casic.missiles.service.impl.DeviceBizDataServiceImpl;
import com.casic.missiles.service.impl.DeviceFrameLogServiceImpl;
+import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.util.SnowflakeUtil;
import com.casic.missiles.util.SpringContextUtil;
import io.netty.buffer.ByteBuf;
@@ -61,14 +60,7 @@
log.info("上行HEX字节消息解析成功:{}", birmmFrame.toJSON().toJSONString());
// 保存日志
- DeviceFrameLog frameLog = new DeviceFrameLog();
- frameLog.setId(new SnowflakeUtil().nextId());
- frameLog.setDevcode(birmmFrame.getDevCode());
- frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase());
- frameLog.setRawBizFrame(birmmFrame.getRawBizFrameString());
- frameLog.setDataJson(birmmFrame.toJSON().toJSONString());
- frameLog.setLogtime(birmmFrame.getLogTime());
- frameLogService.save(frameLog);
+ Long logId = defaultService.saveFrameLog(birmmFrame, frameBytes);
// 推送
// 需要异步推
@@ -76,18 +68,12 @@
// 保存业务数据
if (birmmFrame.isBizDataFrame()) {
- List bizDataList = birmmFrame.convertToBizDataList();
- for (DeviceBizData bizData : bizDataList) {
- // 设置其他的属性
- bizData.setId(new SnowflakeUtil().nextId());
- bizData.setFrameLogId(frameLog.getId()); // 关联日志记录id
- bizData.setDevcode(birmmFrame.getDevCode());
- bizData.setDeviceType(Integer.valueOf(birmmFrame.getDeviceType()));
- bizData.setLogtime(birmmFrame.getLogTime());
- }
+ defaultService.saveBizData(birmmFrame, logId);
+ }
- // 批量保存
- bizDataService.saveBatch(bizDataList);
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
}
// 创建回复消息
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
index 6fa8cce..eef7b55 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
@@ -30,7 +30,7 @@
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, Object obj) throws Exception {
- System.out.println("Client->Server:" + obj);
+// System.out.println("Client->Server:" + obj);
byte[] replyBytes = BytesUtil.hexStringToBytes(obj.toString());
ByteBuf replyByteBuf = Unpooled.copiedBuffer(replyBytes);
//进行回复
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
index cb5ab89..bd1b402 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
@@ -16,6 +16,8 @@
Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes);
void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId);
+ void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame);
+
void pushMessage(BirmmBaseFrame birmmFrame);
/**
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
index 9b1353d..704c540 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
@@ -5,10 +5,8 @@
import com.casic.missiles.enums.BirmmFrameAttributeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.frame.BirmmFrameBuilderFactory;
-import com.casic.missiles.model.Device;
-import com.casic.missiles.model.DeviceBizData;
-import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.model.SubscribeStore;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+import com.casic.missiles.model.*;
import com.casic.missiles.parser.BirmmProtocolParser;
import com.casic.missiles.parser.safe.SafeStrategy;
import com.casic.missiles.parser.safe.impl.Sm4;
@@ -154,7 +152,20 @@
}
@Override
+ public void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame) {
+ List imeiTags = baseFrame.getTagList().get(SensorStartupTag.class.getSimpleName());
+ if (ObjectUtil.isNotNull(imeiTags) && !imeiTags.isEmpty()) {
+ SensorStartupTag imeiTag = (SensorStartupTag) imeiTags.get(0);
+ deviceService.updateDeviceImei(baseFrame.getDevCode(), imeiTag.getImei(), imeiTag.getIccid());
+ }
+ }
+
+ @Override
public void pushMessage(BirmmBaseFrame birmmFrame) {
+ if (!birmmFrame.needPushToApplication()) {
+ return ;
+ }
+
Device device = deviceService.getDeviceByDeviceCode(birmmFrame.getDevCode());
if (ObjectUtil.isNotNull(device) && ObjectUtil.isNotNull(device.getGroupId())) {
List ssList = subscribeService.getSubscribeListByProduct(device.getGroupId());
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
index 26c13ec..acfa22f 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
@@ -93,6 +93,6 @@
buff.writeBytes(msg.getBytes(StandardCharsets.UTF_8));
ctx.channel().writeAndFlush(buff);
- log.info("通过Tcp推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
+ log.info("通过Flume推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
}
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
index b786666..0702199 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
@@ -1,6 +1,7 @@
package com.casic.missiles.frame.base;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
import com.casic.missiles.frame.tag.config.DateTimeTag;
import com.casic.missiles.model.DeviceBizData;
import lombok.Data;
@@ -61,6 +62,14 @@
return false;
}
+ public boolean needPushToApplication() {
+ return true;
+ }
+
+ public boolean hasSensorStartupTag() {
+ return getTagList().containsKey(SensorStartupTag.class.getSimpleName());
+ }
+
public List convertToBizDataList() {
return new ArrayList<>();
}
@@ -75,7 +84,15 @@
public void doParseBizTag() {}
public void replyPduType() {
+ StringBuilder pduType;
+ int pduValue = Integer.parseInt(operationType) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
+ pduType = new StringBuilder(Integer.toHexString(pduValue));
+ while (pduType.length() != 4) {
+ pduType.insert(0, "0");
+ }
+
+ this.setPduType(pduType.toString().toUpperCase());
}
public void replyBizTag() {
@@ -87,5 +104,4 @@
tags.add(dateTimeTag);
tagList.put(DateTimeTag.class.getSimpleName(), tags);
}
-
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
new file mode 100644
index 0000000..8a30fc2
--- /dev/null
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.frame.base;
+
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+
+import java.time.format.DateTimeFormatter;
+
+public class BirmmStartupRequestFrame extends BirmmBaseFrame {
+
+ public final String MESSAGE_TYPE = "Startup";
+
+ @Override
+ public JSONObject toJSON() {
+ JSONObject json = super.toJSON();
+
+ JSONObject body = new JSONObject();
+ json.put("mType", MESSAGE_TYPE);
+ body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+ if (getTagList().containsKey(SensorStartupTag.class.getSimpleName())) {
+ SensorStartupTag tag = (SensorStartupTag) getTagList().get(SensorStartupTag.class.getSimpleName()).get(0);
+ body.put("imei", tag.getImei());
+ body.put("iccid", tag.getIccid());
+ }
+
+ json.put("mBody", body);
+
+ return json;
+ }
+
+ @Override
+ public boolean needPushToApplication() {
+ return false;
+ }
+}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
index e758e82..bbe5fa9 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
@@ -2,6 +2,7 @@
import com.casic.missiles.enums.BirmmOperationTypeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
+import com.casic.missiles.util.SpringContextUtil;
public class MethaneFrameBuilderFactory {
@@ -9,17 +10,25 @@
BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType);
if (operation != null) {
switch (operation) {
- case DOWN_GET_REQUEST:
- return new MethaneGetRequestFrame();
+ case UP_GET_REQUEST:
+ // GetRequest 设备请求 远程升级的数据包
+ return SpringContextUtil.getBean(MethaneGetRequestFrame.class);
case UP_TRAP_REQUEST:
- return new MethaneTrapRequestFrame();
+ // TrapRequest 设备上报数据
+ return SpringContextUtil.getBean(MethaneTrapRequestFrame.class);
case UP_ONLINE_REQUEST:
- return new MethaneOnlineRequestFrame();
+ // OnlineRequest 设备检查是否需要远程升级
+ return SpringContextUtil.getBean(MethaneOnlineRequestFrame.class);
+
+ case UP_STARTUP_REQUEST:
+ // StartupRequest 设备开机上报三码
+ return SpringContextUtil.getBean(MethaneStartupRequestFrame.class);
case UP_SET_RESPONSE:
- return new MethaneSetResponseFrame();
+ // SetResponse 设备回复配置
+ return SpringContextUtil.getBean(MethaneSetResponseFrame.class);
default:
return null;
@@ -31,25 +40,38 @@
public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) {
BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType);
+ BirmmBaseFrame reply = null;
if (operation != null) {
switch (operation) {
- case DOWN_GET_REQUEST:
+ case UP_GET_REQUEST:
// GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件
- return new MethaneGetResponseFrame();
+ reply = SpringContextUtil.getBean(MethaneGetResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_GET_RESPONSE.getValue());
+ break;
case UP_TRAP_REQUEST:
- // TRAP_REQUEST消息回复TRAP_RESPONSE
- return new MethaneTrapResponseFrame();
+ // TRAP_REQUEST消息回复TRAP_RESPONSE 回复数据上报
+ reply = SpringContextUtil.getBean(MethaneTrapResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_TRAP_RESPONSE.getValue());
+ break;
case UP_ONLINE_REQUEST:
- // ONLINE_REQUEST消息回复ONLINE_RESPONSE
- return new MethaneOnlineResponseFrame();
+ // ONLINE_REQUEST消息回复ONLINE_RESPONSE 回复是否远程升级
+ reply = SpringContextUtil.getBean(MethaneOnlineResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_ONLINE_RESPONSE.getValue());
+ break;
+
+ case UP_SET_RESPONSE:
+ // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码
+ reply = SpringContextUtil.getBean(MethaneStartupResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_STARTUP_RESPONSE.getValue());
+ break;
default:
return null;
}
- } else {
- return null;
}
+
+ return reply;
}
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
index 92e93af..a57c1ab 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
@@ -6,9 +6,11 @@
import com.casic.missiles.frame.tag.ota.RequestOffsetTag;
import com.casic.missiles.frame.tag.ota.RequestSizeTag;
import com.casic.missiles.frame.tag.signal.PCITag;
+import org.springframework.stereotype.Component;
import java.time.format.DateTimeFormatter;
+@Component("MethaneGetRequest")
public class MethaneGetRequestFrame extends BirmmBaseFrame {
private final String DEV_TYPE = "Methane";
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java
deleted file mode 100644
index bd707fa..0000000
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.casic.missiles.frame.methane;
-
-import com.casic.missiles.enums.BirmmOperationTypeEnums;
-import com.casic.missiles.frame.base.BirmmBaseFrame;
-import com.casic.missiles.frame.base.BirmmBaseTag;
-import com.casic.missiles.frame.tag.ota.PackageDataTag;
-import com.casic.missiles.frame.tag.ota.RequestOffsetTag;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class MethaneGetResponseFrame extends BirmmBaseFrame {
-
- @Override
- public void replyPduType() {
- StringBuilder pduType;
-
- int pduValue = Integer.parseInt(BirmmOperationTypeEnums.UP_GET_RESPONSE.getValue()) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
- pduType = new StringBuilder(Integer.toHexString(pduValue));
- while (pduType.length() != 4) {
- pduType.insert(0, "0");
- }
-
- this.setPduType(pduType.toString());
- }
-
- @Override
- public void replyBizTag() {
- // 回复升级包 RequestOffsetTag + PackageDataTag(需要请求的RequestOffsetTag + RequestSizeTag)
- // TODO-LIST
-
- Map> tagList = new HashMap<>();
-
- RequestOffsetTag offsetTag = new RequestOffsetTag();
- offsetTag.setRequestOffset(0);
- List offsetTags = new ArrayList<>();
- offsetTags.add(offsetTag);
- tagList.put(RequestOffsetTag.class.getSimpleName(), offsetTags);
-
- PackageDataTag dataTag = new PackageDataTag();
- dataTag.setData(new byte[] {0});
- List dataTags = new ArrayList<>();
- dataTags.add(dataTag);
- tagList.put(PackageDataTag.class.getSimpleName(), dataTags);
-
- super.setTagList(tagList);
- }
-}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseReply.java
new file mode 100644
index 0000000..605d7d8
--- /dev/null
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseReply.java
@@ -0,0 +1,38 @@
+package com.casic.missiles.frame.methane;
+
+import com.casic.missiles.frame.base.BirmmBaseFrame;
+import com.casic.missiles.frame.base.BirmmBaseTag;
+import com.casic.missiles.frame.tag.ota.PackageDataTag;
+import com.casic.missiles.frame.tag.ota.RequestOffsetTag;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component("MethaneGetResponse")
+public class MethaneGetResponseReply extends BirmmBaseFrame {
+
+ @Override
+ public void replyBizTag() {
+ // 回复升级包 RequestOffsetTag + PackageDataTag(需要请求的RequestOffsetTag + RequestSizeTag)
+ // TODO-LIST
+
+ Map> tagList = new HashMap<>();
+
+ RequestOffsetTag offsetTag = new RequestOffsetTag();
+ offsetTag.setRequestOffset(0);
+ List offsetTags = new ArrayList<>();
+ offsetTags.add(offsetTag);
+ tagList.put(RequestOffsetTag.class.getSimpleName(), offsetTags);
+
+ PackageDataTag dataTag = new PackageDataTag();
+ dataTag.setData(new byte[] {0});
+ List dataTags = new ArrayList<>();
+ dataTags.add(dataTag);
+ tagList.put(PackageDataTag.class.getSimpleName(), dataTags);
+
+ super.setTagList(tagList);
+ }
+}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java
index 440a957..a3d4cb3 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java
@@ -3,9 +3,11 @@
import com.alibaba.fastjson.JSONObject;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.frame.tag.ota.SoftwareVersionTag;
+import org.springframework.stereotype.Component;
import java.time.format.DateTimeFormatter;
+@Component("MethaneOnlineRequest")
public class MethaneOnlineRequestFrame extends BirmmBaseFrame {
private final String DEV_TYPE = "Methane";
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
index 02f1291..dabfe36 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
@@ -22,20 +22,11 @@
@Component
public class SensorhubServerChannelInitialHandler extends ChannelInitializer {
- @Resource
- BirmmHexDecoder birmmHexDecoder;
-
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new LoggingHandler(LogLevel.INFO));
-// pipeline.addLast(new SensorhubDecoder());
-// pipeline.addLast(birmmHexDecoder);
+
pipeline.addLast(new BirmmHexDecoder());
pipeline.addLast(new CommonHexReplier());
-// 心跳续约
-// pipeline.addLast(this.heartBeatRespHandler);
-// pipeline.addLast(this.loginAuthRespHandler); 登录验证
-// pipeline.addLast(this.chatRespHandler); 对话处理器
}
}
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
index 838ae44..d2921af 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
@@ -1,15 +1,14 @@
package com.casic.missiles.parser;
-import cn.hutool.http.HttpUtil;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.model.DeviceBizData;
import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.service.IDeviceBizDataService;
import com.casic.missiles.service.IDeviceFrameLogService;
import com.casic.missiles.service.IGeneralService;
import com.casic.missiles.service.impl.DeviceBizDataServiceImpl;
import com.casic.missiles.service.impl.DeviceFrameLogServiceImpl;
+import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.util.SnowflakeUtil;
import com.casic.missiles.util.SpringContextUtil;
import io.netty.buffer.ByteBuf;
@@ -61,14 +60,7 @@
log.info("上行HEX字节消息解析成功:{}", birmmFrame.toJSON().toJSONString());
// 保存日志
- DeviceFrameLog frameLog = new DeviceFrameLog();
- frameLog.setId(new SnowflakeUtil().nextId());
- frameLog.setDevcode(birmmFrame.getDevCode());
- frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase());
- frameLog.setRawBizFrame(birmmFrame.getRawBizFrameString());
- frameLog.setDataJson(birmmFrame.toJSON().toJSONString());
- frameLog.setLogtime(birmmFrame.getLogTime());
- frameLogService.save(frameLog);
+ Long logId = defaultService.saveFrameLog(birmmFrame, frameBytes);
// 推送
// 需要异步推
@@ -76,18 +68,12 @@
// 保存业务数据
if (birmmFrame.isBizDataFrame()) {
- List bizDataList = birmmFrame.convertToBizDataList();
- for (DeviceBizData bizData : bizDataList) {
- // 设置其他的属性
- bizData.setId(new SnowflakeUtil().nextId());
- bizData.setFrameLogId(frameLog.getId()); // 关联日志记录id
- bizData.setDevcode(birmmFrame.getDevCode());
- bizData.setDeviceType(Integer.valueOf(birmmFrame.getDeviceType()));
- bizData.setLogtime(birmmFrame.getLogTime());
- }
+ defaultService.saveBizData(birmmFrame, logId);
+ }
- // 批量保存
- bizDataService.saveBatch(bizDataList);
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
}
// 创建回复消息
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
index 6fa8cce..eef7b55 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
@@ -30,7 +30,7 @@
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, Object obj) throws Exception {
- System.out.println("Client->Server:" + obj);
+// System.out.println("Client->Server:" + obj);
byte[] replyBytes = BytesUtil.hexStringToBytes(obj.toString());
ByteBuf replyByteBuf = Unpooled.copiedBuffer(replyBytes);
//进行回复
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
index cb5ab89..bd1b402 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
@@ -16,6 +16,8 @@
Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes);
void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId);
+ void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame);
+
void pushMessage(BirmmBaseFrame birmmFrame);
/**
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
index 9b1353d..704c540 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
@@ -5,10 +5,8 @@
import com.casic.missiles.enums.BirmmFrameAttributeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.frame.BirmmFrameBuilderFactory;
-import com.casic.missiles.model.Device;
-import com.casic.missiles.model.DeviceBizData;
-import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.model.SubscribeStore;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+import com.casic.missiles.model.*;
import com.casic.missiles.parser.BirmmProtocolParser;
import com.casic.missiles.parser.safe.SafeStrategy;
import com.casic.missiles.parser.safe.impl.Sm4;
@@ -154,7 +152,20 @@
}
@Override
+ public void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame) {
+ List imeiTags = baseFrame.getTagList().get(SensorStartupTag.class.getSimpleName());
+ if (ObjectUtil.isNotNull(imeiTags) && !imeiTags.isEmpty()) {
+ SensorStartupTag imeiTag = (SensorStartupTag) imeiTags.get(0);
+ deviceService.updateDeviceImei(baseFrame.getDevCode(), imeiTag.getImei(), imeiTag.getIccid());
+ }
+ }
+
+ @Override
public void pushMessage(BirmmBaseFrame birmmFrame) {
+ if (!birmmFrame.needPushToApplication()) {
+ return ;
+ }
+
Device device = deviceService.getDeviceByDeviceCode(birmmFrame.getDevCode());
if (ObjectUtil.isNotNull(device) && ObjectUtil.isNotNull(device.getGroupId())) {
List ssList = subscribeService.getSubscribeListByProduct(device.getGroupId());
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
index 26c13ec..acfa22f 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
@@ -93,6 +93,6 @@
buff.writeBytes(msg.getBytes(StandardCharsets.UTF_8));
ctx.channel().writeAndFlush(buff);
- log.info("通过Tcp推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
+ log.info("通过Flume推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
}
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
index b786666..0702199 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
@@ -1,6 +1,7 @@
package com.casic.missiles.frame.base;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
import com.casic.missiles.frame.tag.config.DateTimeTag;
import com.casic.missiles.model.DeviceBizData;
import lombok.Data;
@@ -61,6 +62,14 @@
return false;
}
+ public boolean needPushToApplication() {
+ return true;
+ }
+
+ public boolean hasSensorStartupTag() {
+ return getTagList().containsKey(SensorStartupTag.class.getSimpleName());
+ }
+
public List convertToBizDataList() {
return new ArrayList<>();
}
@@ -75,7 +84,15 @@
public void doParseBizTag() {}
public void replyPduType() {
+ StringBuilder pduType;
+ int pduValue = Integer.parseInt(operationType) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
+ pduType = new StringBuilder(Integer.toHexString(pduValue));
+ while (pduType.length() != 4) {
+ pduType.insert(0, "0");
+ }
+
+ this.setPduType(pduType.toString().toUpperCase());
}
public void replyBizTag() {
@@ -87,5 +104,4 @@
tags.add(dateTimeTag);
tagList.put(DateTimeTag.class.getSimpleName(), tags);
}
-
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
new file mode 100644
index 0000000..8a30fc2
--- /dev/null
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.frame.base;
+
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+
+import java.time.format.DateTimeFormatter;
+
+public class BirmmStartupRequestFrame extends BirmmBaseFrame {
+
+ public final String MESSAGE_TYPE = "Startup";
+
+ @Override
+ public JSONObject toJSON() {
+ JSONObject json = super.toJSON();
+
+ JSONObject body = new JSONObject();
+ json.put("mType", MESSAGE_TYPE);
+ body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+ if (getTagList().containsKey(SensorStartupTag.class.getSimpleName())) {
+ SensorStartupTag tag = (SensorStartupTag) getTagList().get(SensorStartupTag.class.getSimpleName()).get(0);
+ body.put("imei", tag.getImei());
+ body.put("iccid", tag.getIccid());
+ }
+
+ json.put("mBody", body);
+
+ return json;
+ }
+
+ @Override
+ public boolean needPushToApplication() {
+ return false;
+ }
+}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
index e758e82..bbe5fa9 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
@@ -2,6 +2,7 @@
import com.casic.missiles.enums.BirmmOperationTypeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
+import com.casic.missiles.util.SpringContextUtil;
public class MethaneFrameBuilderFactory {
@@ -9,17 +10,25 @@
BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType);
if (operation != null) {
switch (operation) {
- case DOWN_GET_REQUEST:
- return new MethaneGetRequestFrame();
+ case UP_GET_REQUEST:
+ // GetRequest 设备请求 远程升级的数据包
+ return SpringContextUtil.getBean(MethaneGetRequestFrame.class);
case UP_TRAP_REQUEST:
- return new MethaneTrapRequestFrame();
+ // TrapRequest 设备上报数据
+ return SpringContextUtil.getBean(MethaneTrapRequestFrame.class);
case UP_ONLINE_REQUEST:
- return new MethaneOnlineRequestFrame();
+ // OnlineRequest 设备检查是否需要远程升级
+ return SpringContextUtil.getBean(MethaneOnlineRequestFrame.class);
+
+ case UP_STARTUP_REQUEST:
+ // StartupRequest 设备开机上报三码
+ return SpringContextUtil.getBean(MethaneStartupRequestFrame.class);
case UP_SET_RESPONSE:
- return new MethaneSetResponseFrame();
+ // SetResponse 设备回复配置
+ return SpringContextUtil.getBean(MethaneSetResponseFrame.class);
default:
return null;
@@ -31,25 +40,38 @@
public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) {
BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType);
+ BirmmBaseFrame reply = null;
if (operation != null) {
switch (operation) {
- case DOWN_GET_REQUEST:
+ case UP_GET_REQUEST:
// GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件
- return new MethaneGetResponseFrame();
+ reply = SpringContextUtil.getBean(MethaneGetResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_GET_RESPONSE.getValue());
+ break;
case UP_TRAP_REQUEST:
- // TRAP_REQUEST消息回复TRAP_RESPONSE
- return new MethaneTrapResponseFrame();
+ // TRAP_REQUEST消息回复TRAP_RESPONSE 回复数据上报
+ reply = SpringContextUtil.getBean(MethaneTrapResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_TRAP_RESPONSE.getValue());
+ break;
case UP_ONLINE_REQUEST:
- // ONLINE_REQUEST消息回复ONLINE_RESPONSE
- return new MethaneOnlineResponseFrame();
+ // ONLINE_REQUEST消息回复ONLINE_RESPONSE 回复是否远程升级
+ reply = SpringContextUtil.getBean(MethaneOnlineResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_ONLINE_RESPONSE.getValue());
+ break;
+
+ case UP_SET_RESPONSE:
+ // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码
+ reply = SpringContextUtil.getBean(MethaneStartupResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_STARTUP_RESPONSE.getValue());
+ break;
default:
return null;
}
- } else {
- return null;
}
+
+ return reply;
}
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
index 92e93af..a57c1ab 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
@@ -6,9 +6,11 @@
import com.casic.missiles.frame.tag.ota.RequestOffsetTag;
import com.casic.missiles.frame.tag.ota.RequestSizeTag;
import com.casic.missiles.frame.tag.signal.PCITag;
+import org.springframework.stereotype.Component;
import java.time.format.DateTimeFormatter;
+@Component("MethaneGetRequest")
public class MethaneGetRequestFrame extends BirmmBaseFrame {
private final String DEV_TYPE = "Methane";
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java
deleted file mode 100644
index bd707fa..0000000
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.casic.missiles.frame.methane;
-
-import com.casic.missiles.enums.BirmmOperationTypeEnums;
-import com.casic.missiles.frame.base.BirmmBaseFrame;
-import com.casic.missiles.frame.base.BirmmBaseTag;
-import com.casic.missiles.frame.tag.ota.PackageDataTag;
-import com.casic.missiles.frame.tag.ota.RequestOffsetTag;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class MethaneGetResponseFrame extends BirmmBaseFrame {
-
- @Override
- public void replyPduType() {
- StringBuilder pduType;
-
- int pduValue = Integer.parseInt(BirmmOperationTypeEnums.UP_GET_RESPONSE.getValue()) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
- pduType = new StringBuilder(Integer.toHexString(pduValue));
- while (pduType.length() != 4) {
- pduType.insert(0, "0");
- }
-
- this.setPduType(pduType.toString());
- }
-
- @Override
- public void replyBizTag() {
- // 回复升级包 RequestOffsetTag + PackageDataTag(需要请求的RequestOffsetTag + RequestSizeTag)
- // TODO-LIST
-
- Map> tagList = new HashMap<>();
-
- RequestOffsetTag offsetTag = new RequestOffsetTag();
- offsetTag.setRequestOffset(0);
- List offsetTags = new ArrayList<>();
- offsetTags.add(offsetTag);
- tagList.put(RequestOffsetTag.class.getSimpleName(), offsetTags);
-
- PackageDataTag dataTag = new PackageDataTag();
- dataTag.setData(new byte[] {0});
- List dataTags = new ArrayList<>();
- dataTags.add(dataTag);
- tagList.put(PackageDataTag.class.getSimpleName(), dataTags);
-
- super.setTagList(tagList);
- }
-}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseReply.java
new file mode 100644
index 0000000..605d7d8
--- /dev/null
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseReply.java
@@ -0,0 +1,38 @@
+package com.casic.missiles.frame.methane;
+
+import com.casic.missiles.frame.base.BirmmBaseFrame;
+import com.casic.missiles.frame.base.BirmmBaseTag;
+import com.casic.missiles.frame.tag.ota.PackageDataTag;
+import com.casic.missiles.frame.tag.ota.RequestOffsetTag;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component("MethaneGetResponse")
+public class MethaneGetResponseReply extends BirmmBaseFrame {
+
+ @Override
+ public void replyBizTag() {
+ // 回复升级包 RequestOffsetTag + PackageDataTag(需要请求的RequestOffsetTag + RequestSizeTag)
+ // TODO-LIST
+
+ Map> tagList = new HashMap<>();
+
+ RequestOffsetTag offsetTag = new RequestOffsetTag();
+ offsetTag.setRequestOffset(0);
+ List offsetTags = new ArrayList<>();
+ offsetTags.add(offsetTag);
+ tagList.put(RequestOffsetTag.class.getSimpleName(), offsetTags);
+
+ PackageDataTag dataTag = new PackageDataTag();
+ dataTag.setData(new byte[] {0});
+ List dataTags = new ArrayList<>();
+ dataTags.add(dataTag);
+ tagList.put(PackageDataTag.class.getSimpleName(), dataTags);
+
+ super.setTagList(tagList);
+ }
+}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java
index 440a957..a3d4cb3 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java
@@ -3,9 +3,11 @@
import com.alibaba.fastjson.JSONObject;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.frame.tag.ota.SoftwareVersionTag;
+import org.springframework.stereotype.Component;
import java.time.format.DateTimeFormatter;
+@Component("MethaneOnlineRequest")
public class MethaneOnlineRequestFrame extends BirmmBaseFrame {
private final String DEV_TYPE = "Methane";
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java
deleted file mode 100644
index 2c7a7f8..0000000
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.casic.missiles.frame.methane;
-
-import com.casic.missiles.enums.BirmmOperationTypeEnums;
-import com.casic.missiles.frame.base.BirmmBaseFrame;
-import com.casic.missiles.frame.base.BirmmBaseTag;
-import com.casic.missiles.frame.tag.ota.NeedOTATag;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class MethaneOnlineResponseFrame extends BirmmBaseFrame {
-
- @Override
- public void replyPduType() {
- StringBuilder pduType;
-
- int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_ONLINE_RESPONSE.getValue()) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
- pduType = new StringBuilder(Integer.toHexString(pduValue));
- while (pduType.length() != 4) {
- pduType.insert(0, "0");
- }
-
- this.setPduType(pduType.toString());
- }
-
- @Override
- public void replyBizTag() {
- // 无需升级 回复NeedOTATag
- // 需要升级 回复NeedOTATag + PackageSizeTag + PackageCRCTag
- // TODO-LIST
- // 暂时回复不用升级
- Map> tagList = new HashMap<>();
- NeedOTATag needTag = new NeedOTATag();
- needTag.setNeed(false);
- List needTags = new ArrayList<>();
- needTags.add(needTag);
- tagList.put(NeedOTATag.class.getSimpleName(), needTags);
- super.setTagList(tagList);
- }
-}
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page listPage(Page page, DeviceListRequest request, DataScope dataScope) throws Exception {
@@ -87,6 +89,7 @@
public Device getDeviceByDeviceCode(String deviceCode) {
QueryWrapper query = new QueryWrapper<>();
query.eq("devcode", deviceCode);
+ query.eq("valid", "1");
return getOne(query);
}
@@ -110,6 +113,23 @@
}
@Override
+ public void updateDeviceImei(String deviceCode, String imei, String iccid) {
+ Device device = getDeviceByDeviceCode(deviceCode);
+ if (ObjectUtil.isNotNull(device)) {
+ device.setImei(imei);
+ device.setIccid(iccid);
+ baseMapper.updateById(device);
+
+ DeviceImeiIccid imeiIccid = new DeviceImeiIccid();
+ imeiIccid.setDevcode(deviceCode);
+ imeiIccid.setImei(imei);
+ imeiIccid.setIccid(iccid);
+ imeiIccid.setLogtime(LocalDateTime.now());
+ imeiIccidMapper.insert(imeiIccid);
+ }
+ }
+
+ @Override
public ReturnDTO deleteDevice(List ids) {
if (this.baseMapper.deleteBatchIds(ids) > 0) {
return ReturnUtil.success();
diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml
index 8a8f80d..ec165dc 100644
--- a/casic-iot-web/src/main/resources/config/application-dev.yml
+++ b/casic-iot-web/src/main/resources/config/application-dev.yml
@@ -44,8 +44,9 @@
enable: false
logging:
- level.root: error
- level.com.casic: debug
+ level:
+ root: error
+ com.casic: debug
file:
path: logs/
name: missiles.log
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
index 031a9ef..8520159 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/GeneralDataReceiver.java
@@ -67,6 +67,11 @@
defaultService.saveBizData(birmmFrame, logId);
}
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
+ }
+
// 创建回复消息
BirmmBaseFrame configFrame = defaultService.buildReplyFrame(birmmFrame);
if (configFrame != null) {
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
index 02f1291..dabfe36 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/handler/SensorhubServerChannelInitialHandler.java
@@ -22,20 +22,11 @@
@Component
public class SensorhubServerChannelInitialHandler extends ChannelInitializer {
- @Resource
- BirmmHexDecoder birmmHexDecoder;
-
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new LoggingHandler(LogLevel.INFO));
-// pipeline.addLast(new SensorhubDecoder());
-// pipeline.addLast(birmmHexDecoder);
+
pipeline.addLast(new BirmmHexDecoder());
pipeline.addLast(new CommonHexReplier());
-// 心跳续约
-// pipeline.addLast(this.heartBeatRespHandler);
-// pipeline.addLast(this.loginAuthRespHandler); 登录验证
-// pipeline.addLast(this.chatRespHandler); 对话处理器
}
}
\ No newline at end of file
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
index 838ae44..d2921af 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmHexDecoder.java
@@ -1,15 +1,14 @@
package com.casic.missiles.parser;
-import cn.hutool.http.HttpUtil;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.model.DeviceBizData;
import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.service.IDeviceBizDataService;
import com.casic.missiles.service.IDeviceFrameLogService;
import com.casic.missiles.service.IGeneralService;
import com.casic.missiles.service.impl.DeviceBizDataServiceImpl;
import com.casic.missiles.service.impl.DeviceFrameLogServiceImpl;
+import com.casic.missiles.service.impl.GeneralServiceImpl;
import com.casic.missiles.util.SnowflakeUtil;
import com.casic.missiles.util.SpringContextUtil;
import io.netty.buffer.ByteBuf;
@@ -61,14 +60,7 @@
log.info("上行HEX字节消息解析成功:{}", birmmFrame.toJSON().toJSONString());
// 保存日志
- DeviceFrameLog frameLog = new DeviceFrameLog();
- frameLog.setId(new SnowflakeUtil().nextId());
- frameLog.setDevcode(birmmFrame.getDevCode());
- frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase());
- frameLog.setRawBizFrame(birmmFrame.getRawBizFrameString());
- frameLog.setDataJson(birmmFrame.toJSON().toJSONString());
- frameLog.setLogtime(birmmFrame.getLogTime());
- frameLogService.save(frameLog);
+ Long logId = defaultService.saveFrameLog(birmmFrame, frameBytes);
// 推送
// 需要异步推
@@ -76,18 +68,12 @@
// 保存业务数据
if (birmmFrame.isBizDataFrame()) {
- List bizDataList = birmmFrame.convertToBizDataList();
- for (DeviceBizData bizData : bizDataList) {
- // 设置其他的属性
- bizData.setId(new SnowflakeUtil().nextId());
- bizData.setFrameLogId(frameLog.getId()); // 关联日志记录id
- bizData.setDevcode(birmmFrame.getDevCode());
- bizData.setDeviceType(Integer.valueOf(birmmFrame.getDeviceType()));
- bizData.setLogtime(birmmFrame.getLogTime());
- }
+ defaultService.saveBizData(birmmFrame, logId);
+ }
- // 批量保存
- bizDataService.saveBatch(bizDataList);
+ // 保存三码
+ if (birmmFrame.hasSensorStartupTag()) {
+ defaultService.saveSensorDevCodeAndImei(birmmFrame);
}
// 创建回复消息
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
index 6fa8cce..eef7b55 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/CommonHexReplier.java
@@ -30,7 +30,7 @@
*/
@Override
public void channelRead0(ChannelHandlerContext ctx, Object obj) throws Exception {
- System.out.println("Client->Server:" + obj);
+// System.out.println("Client->Server:" + obj);
byte[] replyBytes = BytesUtil.hexStringToBytes(obj.toString());
ByteBuf replyByteBuf = Unpooled.copiedBuffer(replyBytes);
//进行回复
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
index cb5ab89..bd1b402 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/IGeneralService.java
@@ -16,6 +16,8 @@
Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes);
void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId);
+ void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame);
+
void pushMessage(BirmmBaseFrame birmmFrame);
/**
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
index 9b1353d..704c540 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/GeneralServiceImpl.java
@@ -5,10 +5,8 @@
import com.casic.missiles.enums.BirmmFrameAttributeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.frame.BirmmFrameBuilderFactory;
-import com.casic.missiles.model.Device;
-import com.casic.missiles.model.DeviceBizData;
-import com.casic.missiles.model.DeviceFrameLog;
-import com.casic.missiles.model.SubscribeStore;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+import com.casic.missiles.model.*;
import com.casic.missiles.parser.BirmmProtocolParser;
import com.casic.missiles.parser.safe.SafeStrategy;
import com.casic.missiles.parser.safe.impl.Sm4;
@@ -154,7 +152,20 @@
}
@Override
+ public void saveSensorDevCodeAndImei(BirmmBaseFrame baseFrame) {
+ List imeiTags = baseFrame.getTagList().get(SensorStartupTag.class.getSimpleName());
+ if (ObjectUtil.isNotNull(imeiTags) && !imeiTags.isEmpty()) {
+ SensorStartupTag imeiTag = (SensorStartupTag) imeiTags.get(0);
+ deviceService.updateDeviceImei(baseFrame.getDevCode(), imeiTag.getImei(), imeiTag.getIccid());
+ }
+ }
+
+ @Override
public void pushMessage(BirmmBaseFrame birmmFrame) {
+ if (!birmmFrame.needPushToApplication()) {
+ return ;
+ }
+
Device device = deviceService.getDeviceByDeviceCode(birmmFrame.getDevCode());
if (ObjectUtil.isNotNull(device) && ObjectUtil.isNotNull(device.getGroupId())) {
List ssList = subscribeService.getSubscribeListByProduct(device.getGroupId());
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
index 26c13ec..acfa22f 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/service/impl/PushServiceImplFlume.java
@@ -93,6 +93,6 @@
buff.writeBytes(msg.getBytes(StandardCharsets.UTF_8));
ctx.channel().writeAndFlush(buff);
- log.info("通过Tcp推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
+ log.info("通过Flume推送消息[{}] {}", ctx.channel().id().asShortText(), msg.trim());
}
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
index b786666..0702199 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java
@@ -1,6 +1,7 @@
package com.casic.missiles.frame.base;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
import com.casic.missiles.frame.tag.config.DateTimeTag;
import com.casic.missiles.model.DeviceBizData;
import lombok.Data;
@@ -61,6 +62,14 @@
return false;
}
+ public boolean needPushToApplication() {
+ return true;
+ }
+
+ public boolean hasSensorStartupTag() {
+ return getTagList().containsKey(SensorStartupTag.class.getSimpleName());
+ }
+
public List convertToBizDataList() {
return new ArrayList<>();
}
@@ -75,7 +84,15 @@
public void doParseBizTag() {}
public void replyPduType() {
+ StringBuilder pduType;
+ int pduValue = Integer.parseInt(operationType) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
+ pduType = new StringBuilder(Integer.toHexString(pduValue));
+ while (pduType.length() != 4) {
+ pduType.insert(0, "0");
+ }
+
+ this.setPduType(pduType.toString().toUpperCase());
}
public void replyBizTag() {
@@ -87,5 +104,4 @@
tags.add(dateTimeTag);
tagList.put(DateTimeTag.class.getSimpleName(), tags);
}
-
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
new file mode 100644
index 0000000..8a30fc2
--- /dev/null
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmStartupRequestFrame.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.frame.base;
+
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.frame.tag.biz.SensorStartupTag;
+
+import java.time.format.DateTimeFormatter;
+
+public class BirmmStartupRequestFrame extends BirmmBaseFrame {
+
+ public final String MESSAGE_TYPE = "Startup";
+
+ @Override
+ public JSONObject toJSON() {
+ JSONObject json = super.toJSON();
+
+ JSONObject body = new JSONObject();
+ json.put("mType", MESSAGE_TYPE);
+ body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+ if (getTagList().containsKey(SensorStartupTag.class.getSimpleName())) {
+ SensorStartupTag tag = (SensorStartupTag) getTagList().get(SensorStartupTag.class.getSimpleName()).get(0);
+ body.put("imei", tag.getImei());
+ body.put("iccid", tag.getIccid());
+ }
+
+ json.put("mBody", body);
+
+ return json;
+ }
+
+ @Override
+ public boolean needPushToApplication() {
+ return false;
+ }
+}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
index e758e82..bbe5fa9 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java
@@ -2,6 +2,7 @@
import com.casic.missiles.enums.BirmmOperationTypeEnums;
import com.casic.missiles.frame.base.BirmmBaseFrame;
+import com.casic.missiles.util.SpringContextUtil;
public class MethaneFrameBuilderFactory {
@@ -9,17 +10,25 @@
BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType);
if (operation != null) {
switch (operation) {
- case DOWN_GET_REQUEST:
- return new MethaneGetRequestFrame();
+ case UP_GET_REQUEST:
+ // GetRequest 设备请求 远程升级的数据包
+ return SpringContextUtil.getBean(MethaneGetRequestFrame.class);
case UP_TRAP_REQUEST:
- return new MethaneTrapRequestFrame();
+ // TrapRequest 设备上报数据
+ return SpringContextUtil.getBean(MethaneTrapRequestFrame.class);
case UP_ONLINE_REQUEST:
- return new MethaneOnlineRequestFrame();
+ // OnlineRequest 设备检查是否需要远程升级
+ return SpringContextUtil.getBean(MethaneOnlineRequestFrame.class);
+
+ case UP_STARTUP_REQUEST:
+ // StartupRequest 设备开机上报三码
+ return SpringContextUtil.getBean(MethaneStartupRequestFrame.class);
case UP_SET_RESPONSE:
- return new MethaneSetResponseFrame();
+ // SetResponse 设备回复配置
+ return SpringContextUtil.getBean(MethaneSetResponseFrame.class);
default:
return null;
@@ -31,25 +40,38 @@
public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) {
BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType);
+ BirmmBaseFrame reply = null;
if (operation != null) {
switch (operation) {
- case DOWN_GET_REQUEST:
+ case UP_GET_REQUEST:
// GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件
- return new MethaneGetResponseFrame();
+ reply = SpringContextUtil.getBean(MethaneGetResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_GET_RESPONSE.getValue());
+ break;
case UP_TRAP_REQUEST:
- // TRAP_REQUEST消息回复TRAP_RESPONSE
- return new MethaneTrapResponseFrame();
+ // TRAP_REQUEST消息回复TRAP_RESPONSE 回复数据上报
+ reply = SpringContextUtil.getBean(MethaneTrapResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_TRAP_RESPONSE.getValue());
+ break;
case UP_ONLINE_REQUEST:
- // ONLINE_REQUEST消息回复ONLINE_RESPONSE
- return new MethaneOnlineResponseFrame();
+ // ONLINE_REQUEST消息回复ONLINE_RESPONSE 回复是否远程升级
+ reply = SpringContextUtil.getBean(MethaneOnlineResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_ONLINE_RESPONSE.getValue());
+ break;
+
+ case UP_SET_RESPONSE:
+ // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码
+ reply = SpringContextUtil.getBean(MethaneStartupResponseReply.class);
+ reply.setOperationType(BirmmOperationTypeEnums.DOWN_STARTUP_RESPONSE.getValue());
+ break;
default:
return null;
}
- } else {
- return null;
}
+
+ return reply;
}
}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
index 92e93af..a57c1ab 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java
@@ -6,9 +6,11 @@
import com.casic.missiles.frame.tag.ota.RequestOffsetTag;
import com.casic.missiles.frame.tag.ota.RequestSizeTag;
import com.casic.missiles.frame.tag.signal.PCITag;
+import org.springframework.stereotype.Component;
import java.time.format.DateTimeFormatter;
+@Component("MethaneGetRequest")
public class MethaneGetRequestFrame extends BirmmBaseFrame {
private final String DEV_TYPE = "Methane";
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java
deleted file mode 100644
index bd707fa..0000000
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.casic.missiles.frame.methane;
-
-import com.casic.missiles.enums.BirmmOperationTypeEnums;
-import com.casic.missiles.frame.base.BirmmBaseFrame;
-import com.casic.missiles.frame.base.BirmmBaseTag;
-import com.casic.missiles.frame.tag.ota.PackageDataTag;
-import com.casic.missiles.frame.tag.ota.RequestOffsetTag;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class MethaneGetResponseFrame extends BirmmBaseFrame {
-
- @Override
- public void replyPduType() {
- StringBuilder pduType;
-
- int pduValue = Integer.parseInt(BirmmOperationTypeEnums.UP_GET_RESPONSE.getValue()) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
- pduType = new StringBuilder(Integer.toHexString(pduValue));
- while (pduType.length() != 4) {
- pduType.insert(0, "0");
- }
-
- this.setPduType(pduType.toString());
- }
-
- @Override
- public void replyBizTag() {
- // 回复升级包 RequestOffsetTag + PackageDataTag(需要请求的RequestOffsetTag + RequestSizeTag)
- // TODO-LIST
-
- Map> tagList = new HashMap<>();
-
- RequestOffsetTag offsetTag = new RequestOffsetTag();
- offsetTag.setRequestOffset(0);
- List offsetTags = new ArrayList<>();
- offsetTags.add(offsetTag);
- tagList.put(RequestOffsetTag.class.getSimpleName(), offsetTags);
-
- PackageDataTag dataTag = new PackageDataTag();
- dataTag.setData(new byte[] {0});
- List dataTags = new ArrayList<>();
- dataTags.add(dataTag);
- tagList.put(PackageDataTag.class.getSimpleName(), dataTags);
-
- super.setTagList(tagList);
- }
-}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseReply.java
new file mode 100644
index 0000000..605d7d8
--- /dev/null
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseReply.java
@@ -0,0 +1,38 @@
+package com.casic.missiles.frame.methane;
+
+import com.casic.missiles.frame.base.BirmmBaseFrame;
+import com.casic.missiles.frame.base.BirmmBaseTag;
+import com.casic.missiles.frame.tag.ota.PackageDataTag;
+import com.casic.missiles.frame.tag.ota.RequestOffsetTag;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component("MethaneGetResponse")
+public class MethaneGetResponseReply extends BirmmBaseFrame {
+
+ @Override
+ public void replyBizTag() {
+ // 回复升级包 RequestOffsetTag + PackageDataTag(需要请求的RequestOffsetTag + RequestSizeTag)
+ // TODO-LIST
+
+ Map> tagList = new HashMap<>();
+
+ RequestOffsetTag offsetTag = new RequestOffsetTag();
+ offsetTag.setRequestOffset(0);
+ List offsetTags = new ArrayList<>();
+ offsetTags.add(offsetTag);
+ tagList.put(RequestOffsetTag.class.getSimpleName(), offsetTags);
+
+ PackageDataTag dataTag = new PackageDataTag();
+ dataTag.setData(new byte[] {0});
+ List dataTags = new ArrayList<>();
+ dataTags.add(dataTag);
+ tagList.put(PackageDataTag.class.getSimpleName(), dataTags);
+
+ super.setTagList(tagList);
+ }
+}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java
index 440a957..a3d4cb3 100644
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java
@@ -3,9 +3,11 @@
import com.alibaba.fastjson.JSONObject;
import com.casic.missiles.frame.base.BirmmBaseFrame;
import com.casic.missiles.frame.tag.ota.SoftwareVersionTag;
+import org.springframework.stereotype.Component;
import java.time.format.DateTimeFormatter;
+@Component("MethaneOnlineRequest")
public class MethaneOnlineRequestFrame extends BirmmBaseFrame {
private final String DEV_TYPE = "Methane";
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java
deleted file mode 100644
index 2c7a7f8..0000000
--- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.casic.missiles.frame.methane;
-
-import com.casic.missiles.enums.BirmmOperationTypeEnums;
-import com.casic.missiles.frame.base.BirmmBaseFrame;
-import com.casic.missiles.frame.base.BirmmBaseTag;
-import com.casic.missiles.frame.tag.ota.NeedOTATag;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class MethaneOnlineResponseFrame extends BirmmBaseFrame {
-
- @Override
- public void replyPduType() {
- StringBuilder pduType;
-
- int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_ONLINE_RESPONSE.getValue()) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
- pduType = new StringBuilder(Integer.toHexString(pduValue));
- while (pduType.length() != 4) {
- pduType.insert(0, "0");
- }
-
- this.setPduType(pduType.toString());
- }
-
- @Override
- public void replyBizTag() {
- // 无需升级 回复NeedOTATag
- // 需要升级 回复NeedOTATag + PackageSizeTag + PackageCRCTag
- // TODO-LIST
- // 暂时回复不用升级
- Map> tagList = new HashMap<>();
- NeedOTATag needTag = new NeedOTATag();
- needTag.setNeed(false);
- List needTags = new ArrayList<>();
- needTags.add(needTag);
- tagList.put(NeedOTATag.class.getSimpleName(), needTags);
- super.setTagList(tagList);
- }
-}
diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseReply.java
new file mode 100644
index 0000000..e401e91
--- /dev/null
+++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseReply.java
@@ -0,0 +1,44 @@
+package com.casic.missiles.frame.methane;
+
+import com.casic.missiles.enums.BirmmOperationTypeEnums;
+import com.casic.missiles.frame.base.BirmmBaseFrame;
+import com.casic.missiles.frame.base.BirmmBaseTag;
+import com.casic.missiles.frame.tag.ota.NeedOTATag;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component("MethaneOnlineResponse")
+public class MethaneOnlineResponseReply extends BirmmBaseFrame {
+
+ @Override
+ public void replyPduType() {
+ StringBuilder pduType;
+
+ int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_ONLINE_RESPONSE.getValue()) * 256 + 128 + Integer.parseInt(getDeviceType(), 16);
+ pduType = new StringBuilder(Integer.toHexString(pduValue));
+ while (pduType.length() != 4) {
+ pduType.insert(0, "0");
+ }
+
+ this.setPduType(pduType.toString().toUpperCase());
+ }
+
+ @Override
+ public void replyBizTag() {
+ // 无需升级 回复NeedOTATag
+ // 需要升级 回复NeedOTATag + PackageSizeTag + PackageCRCTag
+ // TODO-LIST
+ // 暂时回复不用升级
+ Map> tagList = new HashMap<>();
+ NeedOTATag needTag = new NeedOTATag();
+ needTag.setNeed(false);
+ List needTags = new ArrayList<>();
+ needTags.add(needTag);
+ tagList.put(NeedOTATag.class.getSimpleName(), needTags);
+ super.setTagList(tagList);
+ }
+}
diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
new file mode 100644
index 0000000..420241e
--- /dev/null
+++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceImeiIccidMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+/**
+ *
+ * 设备三码 Mapper 接口
+ *
+ */
+public interface DeviceImeiIccidMapper extends BaseMapper {
+
+}
diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
new file mode 100644
index 0000000..918be8d
--- /dev/null
+++ b/casic-iot-dao/src/main/resources/mapper/DeviceImeiIccidMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID, DEVCODE, IMEI, ICCID, logtime
+
+
+
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
new file mode 100644
index 0000000..5703f6c
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/model/DeviceImeiIccid.java
@@ -0,0 +1,56 @@
+package com.casic.missiles.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 设备三码信息
+ *
+ *
+ * @author tanyue
+ * @since 2024-07-16
+ */
+@Data
+@TableName("device_imei_iccid")
+public class DeviceImeiIccid implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 编号
+ */
+ @TableId("ID")
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @TableField("DEVCODE")
+ private String devcode;
+
+ /**
+ * IMEI
+ */
+ @TableField("IMEI")
+ private String imei;
+ /**
+ * ICCID
+ */
+ @TableField("ICCID")
+ private String iccid;
+
+ /**
+ * 记录日期 默认为当前时间
+ */
+ @TableField("logtime")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime logtime;
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
new file mode 100644
index 0000000..29714f4
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceImeiIccidService.java
@@ -0,0 +1,7 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.model.DeviceImeiIccid;
+
+public interface IDeviceImeiIccidService extends IService {
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
index 8bc8fad..619725a 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/IDeviceService.java
@@ -31,6 +31,7 @@
ReturnDTO addDevice(Device deviceGroup);
ReturnDTO updateDevice(Device deviceGroup);
+ void updateDeviceImei(String deviceCode, String imei, String iccid);
ReturnDTO deleteDevice(List ids);
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
new file mode 100644
index 0000000..07a9f55
--- /dev/null
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceImeiIccidServiceImpl.java
@@ -0,0 +1,17 @@
+package com.casic.missiles.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
+import com.casic.missiles.model.DeviceImeiIccid;
+import com.casic.missiles.service.IDeviceImeiIccidService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备三码 服务实现
+ */
+@Service
+@RequiredArgsConstructor
+public class DeviceImeiIccidServiceImpl extends ServiceImpl implements IDeviceImeiIccidService {
+
+}
diff --git a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
index f8c8532..20230ca 100644
--- a/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
+++ b/casic-iot-service/src/main/java/com/casic/missiles/service/impl/DeviceServiceImpl.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.shiro.ShiroKit;
@@ -18,19 +19,19 @@
import com.casic.missiles.dto.device.DeviceListRequest;
import com.casic.missiles.dto.device.DeviceListVO;
import com.casic.missiles.dto.device.ImportDeviceDTO;
-import com.casic.missiles.dto.group.DeviceGroupListVO;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.DictCodeEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.mapper.DeviceGroupMapper;
-import com.casic.missiles.mapper.ProductInfoMapper;
+import com.casic.missiles.mapper.DeviceImeiIccidMapper;
import com.casic.missiles.mapper.DeviceMapper;
+import com.casic.missiles.mapper.ProductInfoMapper;
import com.casic.missiles.mapper.common.SysCommonMapper;
import com.casic.missiles.model.Device;
import com.casic.missiles.model.DeviceGroup;
+import com.casic.missiles.model.DeviceImeiIccid;
import com.casic.missiles.model.ProductInfo;
import com.casic.missiles.service.IDeviceService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.missiles.util.CommonExcelListener;
import com.casic.missiles.util.DictCodeUtils;
import lombok.RequiredArgsConstructor;
@@ -39,7 +40,7 @@
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Wrapper;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
private final ProductInfoMapper productInfoMapper;
private final DeviceGroupMapper deviceGroupMapper;
private final SysCommonMapper sysCommonMapper;
+ private final DeviceImeiIccidMapper imeiIccidMapper;
@Override
public Page