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 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index e6298b3..0000000 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmBaseFrame; - -public class MethaneTrapResponseFrame extends BirmmBaseFrame { - - @Override - public void replyPduType() { - StringBuilder pduType; - - int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); - } -} 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index e6298b3..0000000 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmBaseFrame; - -public class MethaneTrapResponseFrame extends BirmmBaseFrame { - - @Override - public void replyPduType() { - StringBuilder pduType; - - int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); - } -} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java new file mode 100644 index 0000000..f818442 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneTrapResponse") +public class MethaneTrapResponseReply extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); + } +} 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index e6298b3..0000000 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmBaseFrame; - -public class MethaneTrapResponseFrame extends BirmmBaseFrame { - - @Override - public void replyPduType() { - StringBuilder pduType; - - int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); - } -} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java new file mode 100644 index 0000000..f818442 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneTrapResponse") +public class MethaneTrapResponseReply extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java index 339e604..ff58d7c 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -3,7 +3,8 @@ import com.casic.missiles.enums.BirmmOperationTypeEnums; import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.methane.MethaneGetRequestFrame; -import com.casic.missiles.frame.methane.MethaneGetResponseFrame; +import com.casic.missiles.frame.methane.MethaneGetResponseReply; +import com.casic.missiles.util.SpringContextUtil; public class SentinelFrameBuilderFactory { @@ -11,7 +12,7 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: return new MethaneGetRequestFrame(); case UP_TRAP_REQUEST: @@ -20,6 +21,10 @@ case UP_ONLINE_REQUEST: return new SentinelOnlineRequestFrame(); + case UP_STARTUP_REQUEST: + // StartupRequest 设备开机上报三码 + return SpringContextUtil.getBean(SentinelStartupRequestFrame.class); + case UP_SET_RESPONSE: return new SentinelSetResponseFrame(); @@ -35,9 +40,9 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); + return new MethaneGetResponseReply(); case UP_TRAP_REQUEST: // TRAP_REQUEST消息回复TRAP_RESPONSE @@ -47,6 +52,10 @@ // ONLINE_REQUEST消息回复ONLINE_RESPONSE return new SentinelOnlineResponseFrame(); + case UP_STARTUP_REQUEST: + // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码 + return SpringContextUtil.getBean(SentinelStartupResponseFrame.class); + default: return 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/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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index e6298b3..0000000 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmBaseFrame; - -public class MethaneTrapResponseFrame extends BirmmBaseFrame { - - @Override - public void replyPduType() { - StringBuilder pduType; - - int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); - } -} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java new file mode 100644 index 0000000..f818442 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneTrapResponse") +public class MethaneTrapResponseReply extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java index 339e604..ff58d7c 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -3,7 +3,8 @@ import com.casic.missiles.enums.BirmmOperationTypeEnums; import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.methane.MethaneGetRequestFrame; -import com.casic.missiles.frame.methane.MethaneGetResponseFrame; +import com.casic.missiles.frame.methane.MethaneGetResponseReply; +import com.casic.missiles.util.SpringContextUtil; public class SentinelFrameBuilderFactory { @@ -11,7 +12,7 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: return new MethaneGetRequestFrame(); case UP_TRAP_REQUEST: @@ -20,6 +21,10 @@ case UP_ONLINE_REQUEST: return new SentinelOnlineRequestFrame(); + case UP_STARTUP_REQUEST: + // StartupRequest 设备开机上报三码 + return SpringContextUtil.getBean(SentinelStartupRequestFrame.class); + case UP_SET_RESPONSE: return new SentinelSetResponseFrame(); @@ -35,9 +40,9 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); + return new MethaneGetResponseReply(); case UP_TRAP_REQUEST: // TRAP_REQUEST消息回复TRAP_RESPONSE @@ -47,6 +52,10 @@ // ONLINE_REQUEST消息回复ONLINE_RESPONSE return new SentinelOnlineResponseFrame(); + case UP_STARTUP_REQUEST: + // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码 + return SpringContextUtil.getBean(SentinelStartupResponseFrame.class); + default: return null; } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java index 21d9025..9595a99 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java @@ -22,7 +22,7 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } @Override 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index e6298b3..0000000 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmBaseFrame; - -public class MethaneTrapResponseFrame extends BirmmBaseFrame { - - @Override - public void replyPduType() { - StringBuilder pduType; - - int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); - } -} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java new file mode 100644 index 0000000..f818442 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneTrapResponse") +public class MethaneTrapResponseReply extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java index 339e604..ff58d7c 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -3,7 +3,8 @@ import com.casic.missiles.enums.BirmmOperationTypeEnums; import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.methane.MethaneGetRequestFrame; -import com.casic.missiles.frame.methane.MethaneGetResponseFrame; +import com.casic.missiles.frame.methane.MethaneGetResponseReply; +import com.casic.missiles.util.SpringContextUtil; public class SentinelFrameBuilderFactory { @@ -11,7 +12,7 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: return new MethaneGetRequestFrame(); case UP_TRAP_REQUEST: @@ -20,6 +21,10 @@ case UP_ONLINE_REQUEST: return new SentinelOnlineRequestFrame(); + case UP_STARTUP_REQUEST: + // StartupRequest 设备开机上报三码 + return SpringContextUtil.getBean(SentinelStartupRequestFrame.class); + case UP_SET_RESPONSE: return new SentinelSetResponseFrame(); @@ -35,9 +40,9 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); + return new MethaneGetResponseReply(); case UP_TRAP_REQUEST: // TRAP_REQUEST消息回复TRAP_RESPONSE @@ -47,6 +52,10 @@ // ONLINE_REQUEST消息回复ONLINE_RESPONSE return new SentinelOnlineResponseFrame(); + case UP_STARTUP_REQUEST: + // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码 + return SpringContextUtil.getBean(SentinelStartupResponseFrame.class); + default: return null; } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java index 21d9025..9595a99 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java @@ -22,7 +22,7 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } @Override diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java new file mode 100644 index 0000000..2078c1e --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("SentinelStartupRequest") +public class SentinelStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Tube"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index e6298b3..0000000 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmBaseFrame; - -public class MethaneTrapResponseFrame extends BirmmBaseFrame { - - @Override - public void replyPduType() { - StringBuilder pduType; - - int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); - } -} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java new file mode 100644 index 0000000..f818442 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneTrapResponse") +public class MethaneTrapResponseReply extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java index 339e604..ff58d7c 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -3,7 +3,8 @@ import com.casic.missiles.enums.BirmmOperationTypeEnums; import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.methane.MethaneGetRequestFrame; -import com.casic.missiles.frame.methane.MethaneGetResponseFrame; +import com.casic.missiles.frame.methane.MethaneGetResponseReply; +import com.casic.missiles.util.SpringContextUtil; public class SentinelFrameBuilderFactory { @@ -11,7 +12,7 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: return new MethaneGetRequestFrame(); case UP_TRAP_REQUEST: @@ -20,6 +21,10 @@ case UP_ONLINE_REQUEST: return new SentinelOnlineRequestFrame(); + case UP_STARTUP_REQUEST: + // StartupRequest 设备开机上报三码 + return SpringContextUtil.getBean(SentinelStartupRequestFrame.class); + case UP_SET_RESPONSE: return new SentinelSetResponseFrame(); @@ -35,9 +40,9 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); + return new MethaneGetResponseReply(); case UP_TRAP_REQUEST: // TRAP_REQUEST消息回复TRAP_RESPONSE @@ -47,6 +52,10 @@ // ONLINE_REQUEST消息回复ONLINE_RESPONSE return new SentinelOnlineResponseFrame(); + case UP_STARTUP_REQUEST: + // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码 + return SpringContextUtil.getBean(SentinelStartupResponseFrame.class); + default: return null; } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java index 21d9025..9595a99 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java @@ -22,7 +22,7 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } @Override diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java new file mode 100644 index 0000000..2078c1e --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("SentinelStartupRequest") +public class SentinelStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Tube"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java new file mode 100644 index 0000000..21be5bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java @@ -0,0 +1,29 @@ +package com.casic.missiles.frame.sentinel; + +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("SentinelStartupResponse") +public class SentinelStartupResponseFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_STARTUP_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()); + } +} 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index e6298b3..0000000 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmBaseFrame; - -public class MethaneTrapResponseFrame extends BirmmBaseFrame { - - @Override - public void replyPduType() { - StringBuilder pduType; - - int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); - } -} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java new file mode 100644 index 0000000..f818442 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneTrapResponse") +public class MethaneTrapResponseReply extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java index 339e604..ff58d7c 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -3,7 +3,8 @@ import com.casic.missiles.enums.BirmmOperationTypeEnums; import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.methane.MethaneGetRequestFrame; -import com.casic.missiles.frame.methane.MethaneGetResponseFrame; +import com.casic.missiles.frame.methane.MethaneGetResponseReply; +import com.casic.missiles.util.SpringContextUtil; public class SentinelFrameBuilderFactory { @@ -11,7 +12,7 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: return new MethaneGetRequestFrame(); case UP_TRAP_REQUEST: @@ -20,6 +21,10 @@ case UP_ONLINE_REQUEST: return new SentinelOnlineRequestFrame(); + case UP_STARTUP_REQUEST: + // StartupRequest 设备开机上报三码 + return SpringContextUtil.getBean(SentinelStartupRequestFrame.class); + case UP_SET_RESPONSE: return new SentinelSetResponseFrame(); @@ -35,9 +40,9 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); + return new MethaneGetResponseReply(); case UP_TRAP_REQUEST: // TRAP_REQUEST消息回复TRAP_RESPONSE @@ -47,6 +52,10 @@ // ONLINE_REQUEST消息回复ONLINE_RESPONSE return new SentinelOnlineResponseFrame(); + case UP_STARTUP_REQUEST: + // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码 + return SpringContextUtil.getBean(SentinelStartupResponseFrame.class); + default: return null; } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java index 21d9025..9595a99 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java @@ -22,7 +22,7 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } @Override diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java new file mode 100644 index 0000000..2078c1e --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("SentinelStartupRequest") +public class SentinelStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Tube"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java new file mode 100644 index 0000000..21be5bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java @@ -0,0 +1,29 @@ +package com.casic.missiles.frame.sentinel; + +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("SentinelStartupResponse") +public class SentinelStartupResponseFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_STARTUP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java index 5fe773a..b613582 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -15,6 +15,6 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } } 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index e6298b3..0000000 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmBaseFrame; - -public class MethaneTrapResponseFrame extends BirmmBaseFrame { - - @Override - public void replyPduType() { - StringBuilder pduType; - - int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); - } -} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java new file mode 100644 index 0000000..f818442 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneTrapResponse") +public class MethaneTrapResponseReply extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java index 339e604..ff58d7c 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -3,7 +3,8 @@ import com.casic.missiles.enums.BirmmOperationTypeEnums; import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.methane.MethaneGetRequestFrame; -import com.casic.missiles.frame.methane.MethaneGetResponseFrame; +import com.casic.missiles.frame.methane.MethaneGetResponseReply; +import com.casic.missiles.util.SpringContextUtil; public class SentinelFrameBuilderFactory { @@ -11,7 +12,7 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: return new MethaneGetRequestFrame(); case UP_TRAP_REQUEST: @@ -20,6 +21,10 @@ case UP_ONLINE_REQUEST: return new SentinelOnlineRequestFrame(); + case UP_STARTUP_REQUEST: + // StartupRequest 设备开机上报三码 + return SpringContextUtil.getBean(SentinelStartupRequestFrame.class); + case UP_SET_RESPONSE: return new SentinelSetResponseFrame(); @@ -35,9 +40,9 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); + return new MethaneGetResponseReply(); case UP_TRAP_REQUEST: // TRAP_REQUEST消息回复TRAP_RESPONSE @@ -47,6 +52,10 @@ // ONLINE_REQUEST消息回复ONLINE_RESPONSE return new SentinelOnlineResponseFrame(); + case UP_STARTUP_REQUEST: + // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码 + return SpringContextUtil.getBean(SentinelStartupResponseFrame.class); + default: return null; } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java index 21d9025..9595a99 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java @@ -22,7 +22,7 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } @Override diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java new file mode 100644 index 0000000..2078c1e --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("SentinelStartupRequest") +public class SentinelStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Tube"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java new file mode 100644 index 0000000..21be5bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java @@ -0,0 +1,29 @@ +package com.casic.missiles.frame.sentinel; + +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("SentinelStartupResponse") +public class SentinelStartupResponseFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_STARTUP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java index 5fe773a..b613582 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -15,6 +15,6 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java index 8cc826c..4875dcb 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -8,6 +8,7 @@ import com.casic.missiles.frame.tag.signal.PCITag; import com.casic.missiles.frame.tag.signal.RSRPTag; import com.casic.missiles.frame.tag.signal.SNRTag; +import com.casic.missiles.util.SpringContextUtil; public class BirmmTagBuilderFactory { @@ -16,13 +17,13 @@ if (null != tag) { switch (tag) { case RETRY_TIMES_TAG: - return new RetryTimesTag(); + return SpringContextUtil.getBean(RetryTimesTag.class); case DESTINATION_IP_TAG: - return new DestIPTag(); + return SpringContextUtil.getBean(DestIPTag.class); case DESTINATION_PORT_TAG: - return new DestPortTag(); + return SpringContextUtil.getBean(DestPortTag.class); case DATE_TAG: return new DateTag(); @@ -33,8 +34,11 @@ case UPLOAD_INTERVAL_TAG: return new UploadIntervalTag(); + case SENSOR_STARTUP_TAG: + return SpringContextUtil.getBean(SensorStartupTag.class); + case START_TIME_TAG: - return new StartTimeTag(); + return SpringContextUtil.getBean(StartTimeTag.class); case COLLECT_INTERVAL_TAG: return new CollectIntervalTag(); 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index e6298b3..0000000 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmBaseFrame; - -public class MethaneTrapResponseFrame extends BirmmBaseFrame { - - @Override - public void replyPduType() { - StringBuilder pduType; - - int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); - } -} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java new file mode 100644 index 0000000..f818442 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneTrapResponse") +public class MethaneTrapResponseReply extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java index 339e604..ff58d7c 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -3,7 +3,8 @@ import com.casic.missiles.enums.BirmmOperationTypeEnums; import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.methane.MethaneGetRequestFrame; -import com.casic.missiles.frame.methane.MethaneGetResponseFrame; +import com.casic.missiles.frame.methane.MethaneGetResponseReply; +import com.casic.missiles.util.SpringContextUtil; public class SentinelFrameBuilderFactory { @@ -11,7 +12,7 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: return new MethaneGetRequestFrame(); case UP_TRAP_REQUEST: @@ -20,6 +21,10 @@ case UP_ONLINE_REQUEST: return new SentinelOnlineRequestFrame(); + case UP_STARTUP_REQUEST: + // StartupRequest 设备开机上报三码 + return SpringContextUtil.getBean(SentinelStartupRequestFrame.class); + case UP_SET_RESPONSE: return new SentinelSetResponseFrame(); @@ -35,9 +40,9 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); + return new MethaneGetResponseReply(); case UP_TRAP_REQUEST: // TRAP_REQUEST消息回复TRAP_RESPONSE @@ -47,6 +52,10 @@ // ONLINE_REQUEST消息回复ONLINE_RESPONSE return new SentinelOnlineResponseFrame(); + case UP_STARTUP_REQUEST: + // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码 + return SpringContextUtil.getBean(SentinelStartupResponseFrame.class); + default: return null; } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java index 21d9025..9595a99 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java @@ -22,7 +22,7 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } @Override diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java new file mode 100644 index 0000000..2078c1e --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("SentinelStartupRequest") +public class SentinelStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Tube"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java new file mode 100644 index 0000000..21be5bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java @@ -0,0 +1,29 @@ +package com.casic.missiles.frame.sentinel; + +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("SentinelStartupResponse") +public class SentinelStartupResponseFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_STARTUP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java index 5fe773a..b613582 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -15,6 +15,6 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java index 8cc826c..4875dcb 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -8,6 +8,7 @@ import com.casic.missiles.frame.tag.signal.PCITag; import com.casic.missiles.frame.tag.signal.RSRPTag; import com.casic.missiles.frame.tag.signal.SNRTag; +import com.casic.missiles.util.SpringContextUtil; public class BirmmTagBuilderFactory { @@ -16,13 +17,13 @@ if (null != tag) { switch (tag) { case RETRY_TIMES_TAG: - return new RetryTimesTag(); + return SpringContextUtil.getBean(RetryTimesTag.class); case DESTINATION_IP_TAG: - return new DestIPTag(); + return SpringContextUtil.getBean(DestIPTag.class); case DESTINATION_PORT_TAG: - return new DestPortTag(); + return SpringContextUtil.getBean(DestPortTag.class); case DATE_TAG: return new DateTag(); @@ -33,8 +34,11 @@ case UPLOAD_INTERVAL_TAG: return new UploadIntervalTag(); + case SENSOR_STARTUP_TAG: + return SpringContextUtil.getBean(SensorStartupTag.class); + case START_TIME_TAG: - return new StartTimeTag(); + return SpringContextUtil.getBean(StartTimeTag.class); case COLLECT_INTERVAL_TAG: return new CollectIntervalTag(); diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java new file mode 100644 index 0000000..28d6f51 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; + +@EqualsAndHashCode(callSuper = true) +@Component("SensorStartupTag") +@Data +public class SensorStartupTag extends BirmmBaseTag { + + final String STARTUP_TAG_OID = "10000063"; + + String imei; + String iccid; + + @Override + public String toString() { + return super.toString() + "[imei: " + imei + "][iccid: " + iccid + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + + byte[] asciiBytes = BytesUtil.hexStringToBytes(valueStr); + String asciiStr = new String(asciiBytes); + if (asciiStr.length() < 35) { + return; + } + + imei = asciiStr.substring(0, 15); + iccid = asciiStr.substring(15, 35); + } +} 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index e6298b3..0000000 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmBaseFrame; - -public class MethaneTrapResponseFrame extends BirmmBaseFrame { - - @Override - public void replyPduType() { - StringBuilder pduType; - - int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); - } -} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java new file mode 100644 index 0000000..f818442 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneTrapResponse") +public class MethaneTrapResponseReply extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java index 339e604..ff58d7c 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -3,7 +3,8 @@ import com.casic.missiles.enums.BirmmOperationTypeEnums; import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.methane.MethaneGetRequestFrame; -import com.casic.missiles.frame.methane.MethaneGetResponseFrame; +import com.casic.missiles.frame.methane.MethaneGetResponseReply; +import com.casic.missiles.util.SpringContextUtil; public class SentinelFrameBuilderFactory { @@ -11,7 +12,7 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: return new MethaneGetRequestFrame(); case UP_TRAP_REQUEST: @@ -20,6 +21,10 @@ case UP_ONLINE_REQUEST: return new SentinelOnlineRequestFrame(); + case UP_STARTUP_REQUEST: + // StartupRequest 设备开机上报三码 + return SpringContextUtil.getBean(SentinelStartupRequestFrame.class); + case UP_SET_RESPONSE: return new SentinelSetResponseFrame(); @@ -35,9 +40,9 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); + return new MethaneGetResponseReply(); case UP_TRAP_REQUEST: // TRAP_REQUEST消息回复TRAP_RESPONSE @@ -47,6 +52,10 @@ // ONLINE_REQUEST消息回复ONLINE_RESPONSE return new SentinelOnlineResponseFrame(); + case UP_STARTUP_REQUEST: + // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码 + return SpringContextUtil.getBean(SentinelStartupResponseFrame.class); + default: return null; } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java index 21d9025..9595a99 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java @@ -22,7 +22,7 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } @Override diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java new file mode 100644 index 0000000..2078c1e --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("SentinelStartupRequest") +public class SentinelStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Tube"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java new file mode 100644 index 0000000..21be5bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java @@ -0,0 +1,29 @@ +package com.casic.missiles.frame.sentinel; + +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("SentinelStartupResponse") +public class SentinelStartupResponseFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_STARTUP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java index 5fe773a..b613582 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -15,6 +15,6 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java index 8cc826c..4875dcb 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -8,6 +8,7 @@ import com.casic.missiles.frame.tag.signal.PCITag; import com.casic.missiles.frame.tag.signal.RSRPTag; import com.casic.missiles.frame.tag.signal.SNRTag; +import com.casic.missiles.util.SpringContextUtil; public class BirmmTagBuilderFactory { @@ -16,13 +17,13 @@ if (null != tag) { switch (tag) { case RETRY_TIMES_TAG: - return new RetryTimesTag(); + return SpringContextUtil.getBean(RetryTimesTag.class); case DESTINATION_IP_TAG: - return new DestIPTag(); + return SpringContextUtil.getBean(DestIPTag.class); case DESTINATION_PORT_TAG: - return new DestPortTag(); + return SpringContextUtil.getBean(DestPortTag.class); case DATE_TAG: return new DateTag(); @@ -33,8 +34,11 @@ case UPLOAD_INTERVAL_TAG: return new UploadIntervalTag(); + case SENSOR_STARTUP_TAG: + return SpringContextUtil.getBean(SensorStartupTag.class); + case START_TIME_TAG: - return new StartTimeTag(); + return SpringContextUtil.getBean(StartTimeTag.class); case COLLECT_INTERVAL_TAG: return new CollectIntervalTag(); diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java new file mode 100644 index 0000000..28d6f51 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; + +@EqualsAndHashCode(callSuper = true) +@Component("SensorStartupTag") +@Data +public class SensorStartupTag extends BirmmBaseTag { + + final String STARTUP_TAG_OID = "10000063"; + + String imei; + String iccid; + + @Override + public String toString() { + return super.toString() + "[imei: " + imei + "][iccid: " + iccid + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + + byte[] asciiBytes = BytesUtil.hexStringToBytes(valueStr); + String asciiStr = new String(asciiBytes); + if (asciiStr.length() < 35) { + return; + } + + imei = asciiStr.substring(0, 15); + iccid = asciiStr.substring(15, 35); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java index 9bb4820..71995f5 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -4,9 +4,11 @@ import com.casic.missiles.util.BytesUtil; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("DestIPTag") public class DestIPTag extends BirmmBaseTag { final String DESTINATION_IP_TAG_OID = "10000022"; 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index e6298b3..0000000 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmBaseFrame; - -public class MethaneTrapResponseFrame extends BirmmBaseFrame { - - @Override - public void replyPduType() { - StringBuilder pduType; - - int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); - } -} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java new file mode 100644 index 0000000..f818442 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneTrapResponse") +public class MethaneTrapResponseReply extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java index 339e604..ff58d7c 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -3,7 +3,8 @@ import com.casic.missiles.enums.BirmmOperationTypeEnums; import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.methane.MethaneGetRequestFrame; -import com.casic.missiles.frame.methane.MethaneGetResponseFrame; +import com.casic.missiles.frame.methane.MethaneGetResponseReply; +import com.casic.missiles.util.SpringContextUtil; public class SentinelFrameBuilderFactory { @@ -11,7 +12,7 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: return new MethaneGetRequestFrame(); case UP_TRAP_REQUEST: @@ -20,6 +21,10 @@ case UP_ONLINE_REQUEST: return new SentinelOnlineRequestFrame(); + case UP_STARTUP_REQUEST: + // StartupRequest 设备开机上报三码 + return SpringContextUtil.getBean(SentinelStartupRequestFrame.class); + case UP_SET_RESPONSE: return new SentinelSetResponseFrame(); @@ -35,9 +40,9 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); + return new MethaneGetResponseReply(); case UP_TRAP_REQUEST: // TRAP_REQUEST消息回复TRAP_RESPONSE @@ -47,6 +52,10 @@ // ONLINE_REQUEST消息回复ONLINE_RESPONSE return new SentinelOnlineResponseFrame(); + case UP_STARTUP_REQUEST: + // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码 + return SpringContextUtil.getBean(SentinelStartupResponseFrame.class); + default: return null; } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java index 21d9025..9595a99 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java @@ -22,7 +22,7 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } @Override diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java new file mode 100644 index 0000000..2078c1e --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("SentinelStartupRequest") +public class SentinelStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Tube"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java new file mode 100644 index 0000000..21be5bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java @@ -0,0 +1,29 @@ +package com.casic.missiles.frame.sentinel; + +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("SentinelStartupResponse") +public class SentinelStartupResponseFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_STARTUP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java index 5fe773a..b613582 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -15,6 +15,6 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java index 8cc826c..4875dcb 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -8,6 +8,7 @@ import com.casic.missiles.frame.tag.signal.PCITag; import com.casic.missiles.frame.tag.signal.RSRPTag; import com.casic.missiles.frame.tag.signal.SNRTag; +import com.casic.missiles.util.SpringContextUtil; public class BirmmTagBuilderFactory { @@ -16,13 +17,13 @@ if (null != tag) { switch (tag) { case RETRY_TIMES_TAG: - return new RetryTimesTag(); + return SpringContextUtil.getBean(RetryTimesTag.class); case DESTINATION_IP_TAG: - return new DestIPTag(); + return SpringContextUtil.getBean(DestIPTag.class); case DESTINATION_PORT_TAG: - return new DestPortTag(); + return SpringContextUtil.getBean(DestPortTag.class); case DATE_TAG: return new DateTag(); @@ -33,8 +34,11 @@ case UPLOAD_INTERVAL_TAG: return new UploadIntervalTag(); + case SENSOR_STARTUP_TAG: + return SpringContextUtil.getBean(SensorStartupTag.class); + case START_TIME_TAG: - return new StartTimeTag(); + return SpringContextUtil.getBean(StartTimeTag.class); case COLLECT_INTERVAL_TAG: return new CollectIntervalTag(); diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java new file mode 100644 index 0000000..28d6f51 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; + +@EqualsAndHashCode(callSuper = true) +@Component("SensorStartupTag") +@Data +public class SensorStartupTag extends BirmmBaseTag { + + final String STARTUP_TAG_OID = "10000063"; + + String imei; + String iccid; + + @Override + public String toString() { + return super.toString() + "[imei: " + imei + "][iccid: " + iccid + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + + byte[] asciiBytes = BytesUtil.hexStringToBytes(valueStr); + String asciiStr = new String(asciiBytes); + if (asciiStr.length() < 35) { + return; + } + + imei = asciiStr.substring(0, 15); + iccid = asciiStr.substring(15, 35); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java index 9bb4820..71995f5 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -4,9 +4,11 @@ import com.casic.missiles.util.BytesUtil; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("DestIPTag") public class DestIPTag extends BirmmBaseTag { final String DESTINATION_IP_TAG_OID = "10000022"; diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java index ef29dca..1c92a1e 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -4,9 +4,11 @@ import com.casic.missiles.util.BytesUtil; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("DestPortTag") public class DestPortTag extends BirmmBaseTag { final String DESTINATION_PORT_TAG_OID = "10000023"; 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index e6298b3..0000000 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmBaseFrame; - -public class MethaneTrapResponseFrame extends BirmmBaseFrame { - - @Override - public void replyPduType() { - StringBuilder pduType; - - int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); - } -} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java new file mode 100644 index 0000000..f818442 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneTrapResponse") +public class MethaneTrapResponseReply extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java index 339e604..ff58d7c 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -3,7 +3,8 @@ import com.casic.missiles.enums.BirmmOperationTypeEnums; import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.methane.MethaneGetRequestFrame; -import com.casic.missiles.frame.methane.MethaneGetResponseFrame; +import com.casic.missiles.frame.methane.MethaneGetResponseReply; +import com.casic.missiles.util.SpringContextUtil; public class SentinelFrameBuilderFactory { @@ -11,7 +12,7 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: return new MethaneGetRequestFrame(); case UP_TRAP_REQUEST: @@ -20,6 +21,10 @@ case UP_ONLINE_REQUEST: return new SentinelOnlineRequestFrame(); + case UP_STARTUP_REQUEST: + // StartupRequest 设备开机上报三码 + return SpringContextUtil.getBean(SentinelStartupRequestFrame.class); + case UP_SET_RESPONSE: return new SentinelSetResponseFrame(); @@ -35,9 +40,9 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); + return new MethaneGetResponseReply(); case UP_TRAP_REQUEST: // TRAP_REQUEST消息回复TRAP_RESPONSE @@ -47,6 +52,10 @@ // ONLINE_REQUEST消息回复ONLINE_RESPONSE return new SentinelOnlineResponseFrame(); + case UP_STARTUP_REQUEST: + // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码 + return SpringContextUtil.getBean(SentinelStartupResponseFrame.class); + default: return null; } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java index 21d9025..9595a99 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java @@ -22,7 +22,7 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } @Override diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java new file mode 100644 index 0000000..2078c1e --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("SentinelStartupRequest") +public class SentinelStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Tube"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java new file mode 100644 index 0000000..21be5bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java @@ -0,0 +1,29 @@ +package com.casic.missiles.frame.sentinel; + +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("SentinelStartupResponse") +public class SentinelStartupResponseFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_STARTUP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java index 5fe773a..b613582 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -15,6 +15,6 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java index 8cc826c..4875dcb 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -8,6 +8,7 @@ import com.casic.missiles.frame.tag.signal.PCITag; import com.casic.missiles.frame.tag.signal.RSRPTag; import com.casic.missiles.frame.tag.signal.SNRTag; +import com.casic.missiles.util.SpringContextUtil; public class BirmmTagBuilderFactory { @@ -16,13 +17,13 @@ if (null != tag) { switch (tag) { case RETRY_TIMES_TAG: - return new RetryTimesTag(); + return SpringContextUtil.getBean(RetryTimesTag.class); case DESTINATION_IP_TAG: - return new DestIPTag(); + return SpringContextUtil.getBean(DestIPTag.class); case DESTINATION_PORT_TAG: - return new DestPortTag(); + return SpringContextUtil.getBean(DestPortTag.class); case DATE_TAG: return new DateTag(); @@ -33,8 +34,11 @@ case UPLOAD_INTERVAL_TAG: return new UploadIntervalTag(); + case SENSOR_STARTUP_TAG: + return SpringContextUtil.getBean(SensorStartupTag.class); + case START_TIME_TAG: - return new StartTimeTag(); + return SpringContextUtil.getBean(StartTimeTag.class); case COLLECT_INTERVAL_TAG: return new CollectIntervalTag(); diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java new file mode 100644 index 0000000..28d6f51 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; + +@EqualsAndHashCode(callSuper = true) +@Component("SensorStartupTag") +@Data +public class SensorStartupTag extends BirmmBaseTag { + + final String STARTUP_TAG_OID = "10000063"; + + String imei; + String iccid; + + @Override + public String toString() { + return super.toString() + "[imei: " + imei + "][iccid: " + iccid + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + + byte[] asciiBytes = BytesUtil.hexStringToBytes(valueStr); + String asciiStr = new String(asciiBytes); + if (asciiStr.length() < 35) { + return; + } + + imei = asciiStr.substring(0, 15); + iccid = asciiStr.substring(15, 35); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java index 9bb4820..71995f5 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -4,9 +4,11 @@ import com.casic.missiles.util.BytesUtil; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("DestIPTag") public class DestIPTag extends BirmmBaseTag { final String DESTINATION_IP_TAG_OID = "10000022"; diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java index ef29dca..1c92a1e 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -4,9 +4,11 @@ import com.casic.missiles.util.BytesUtil; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("DestPortTag") public class DestPortTag extends BirmmBaseTag { final String DESTINATION_PORT_TAG_OID = "10000023"; diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java index 6d21a35..5db36de 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -3,9 +3,11 @@ import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("RetryTimesTag") public class RetryTimesTag extends BirmmBaseTag { final String RETRY_TIMES_TAG_OID = "1000000A"; 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index e6298b3..0000000 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmBaseFrame; - -public class MethaneTrapResponseFrame extends BirmmBaseFrame { - - @Override - public void replyPduType() { - StringBuilder pduType; - - int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); - } -} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java new file mode 100644 index 0000000..f818442 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneTrapResponse") +public class MethaneTrapResponseReply extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java index 339e604..ff58d7c 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -3,7 +3,8 @@ import com.casic.missiles.enums.BirmmOperationTypeEnums; import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.methane.MethaneGetRequestFrame; -import com.casic.missiles.frame.methane.MethaneGetResponseFrame; +import com.casic.missiles.frame.methane.MethaneGetResponseReply; +import com.casic.missiles.util.SpringContextUtil; public class SentinelFrameBuilderFactory { @@ -11,7 +12,7 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: return new MethaneGetRequestFrame(); case UP_TRAP_REQUEST: @@ -20,6 +21,10 @@ case UP_ONLINE_REQUEST: return new SentinelOnlineRequestFrame(); + case UP_STARTUP_REQUEST: + // StartupRequest 设备开机上报三码 + return SpringContextUtil.getBean(SentinelStartupRequestFrame.class); + case UP_SET_RESPONSE: return new SentinelSetResponseFrame(); @@ -35,9 +40,9 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); + return new MethaneGetResponseReply(); case UP_TRAP_REQUEST: // TRAP_REQUEST消息回复TRAP_RESPONSE @@ -47,6 +52,10 @@ // ONLINE_REQUEST消息回复ONLINE_RESPONSE return new SentinelOnlineResponseFrame(); + case UP_STARTUP_REQUEST: + // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码 + return SpringContextUtil.getBean(SentinelStartupResponseFrame.class); + default: return null; } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java index 21d9025..9595a99 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java @@ -22,7 +22,7 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } @Override diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java new file mode 100644 index 0000000..2078c1e --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("SentinelStartupRequest") +public class SentinelStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Tube"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java new file mode 100644 index 0000000..21be5bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java @@ -0,0 +1,29 @@ +package com.casic.missiles.frame.sentinel; + +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("SentinelStartupResponse") +public class SentinelStartupResponseFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_STARTUP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java index 5fe773a..b613582 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -15,6 +15,6 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java index 8cc826c..4875dcb 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -8,6 +8,7 @@ import com.casic.missiles.frame.tag.signal.PCITag; import com.casic.missiles.frame.tag.signal.RSRPTag; import com.casic.missiles.frame.tag.signal.SNRTag; +import com.casic.missiles.util.SpringContextUtil; public class BirmmTagBuilderFactory { @@ -16,13 +17,13 @@ if (null != tag) { switch (tag) { case RETRY_TIMES_TAG: - return new RetryTimesTag(); + return SpringContextUtil.getBean(RetryTimesTag.class); case DESTINATION_IP_TAG: - return new DestIPTag(); + return SpringContextUtil.getBean(DestIPTag.class); case DESTINATION_PORT_TAG: - return new DestPortTag(); + return SpringContextUtil.getBean(DestPortTag.class); case DATE_TAG: return new DateTag(); @@ -33,8 +34,11 @@ case UPLOAD_INTERVAL_TAG: return new UploadIntervalTag(); + case SENSOR_STARTUP_TAG: + return SpringContextUtil.getBean(SensorStartupTag.class); + case START_TIME_TAG: - return new StartTimeTag(); + return SpringContextUtil.getBean(StartTimeTag.class); case COLLECT_INTERVAL_TAG: return new CollectIntervalTag(); diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java new file mode 100644 index 0000000..28d6f51 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; + +@EqualsAndHashCode(callSuper = true) +@Component("SensorStartupTag") +@Data +public class SensorStartupTag extends BirmmBaseTag { + + final String STARTUP_TAG_OID = "10000063"; + + String imei; + String iccid; + + @Override + public String toString() { + return super.toString() + "[imei: " + imei + "][iccid: " + iccid + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + + byte[] asciiBytes = BytesUtil.hexStringToBytes(valueStr); + String asciiStr = new String(asciiBytes); + if (asciiStr.length() < 35) { + return; + } + + imei = asciiStr.substring(0, 15); + iccid = asciiStr.substring(15, 35); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java index 9bb4820..71995f5 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -4,9 +4,11 @@ import com.casic.missiles.util.BytesUtil; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("DestIPTag") public class DestIPTag extends BirmmBaseTag { final String DESTINATION_IP_TAG_OID = "10000022"; diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java index ef29dca..1c92a1e 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -4,9 +4,11 @@ import com.casic.missiles.util.BytesUtil; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("DestPortTag") public class DestPortTag extends BirmmBaseTag { final String DESTINATION_PORT_TAG_OID = "10000023"; diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java index 6d21a35..5db36de 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -3,9 +3,11 @@ import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("RetryTimesTag") public class RetryTimesTag extends BirmmBaseTag { final String RETRY_TIMES_TAG_OID = "1000000A"; diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java index 925d162..0ba06cf 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -4,9 +4,11 @@ import com.casic.missiles.util.BytesUtil; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("StartTimeTag") public class StartTimeTag extends BirmmBaseTag { final String START_TIME_TAG_OID = "10000104"; 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index e6298b3..0000000 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmBaseFrame; - -public class MethaneTrapResponseFrame extends BirmmBaseFrame { - - @Override - public void replyPduType() { - StringBuilder pduType; - - int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); - } -} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java new file mode 100644 index 0000000..f818442 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneTrapResponse") +public class MethaneTrapResponseReply extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java index 339e604..ff58d7c 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -3,7 +3,8 @@ import com.casic.missiles.enums.BirmmOperationTypeEnums; import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.methane.MethaneGetRequestFrame; -import com.casic.missiles.frame.methane.MethaneGetResponseFrame; +import com.casic.missiles.frame.methane.MethaneGetResponseReply; +import com.casic.missiles.util.SpringContextUtil; public class SentinelFrameBuilderFactory { @@ -11,7 +12,7 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: return new MethaneGetRequestFrame(); case UP_TRAP_REQUEST: @@ -20,6 +21,10 @@ case UP_ONLINE_REQUEST: return new SentinelOnlineRequestFrame(); + case UP_STARTUP_REQUEST: + // StartupRequest 设备开机上报三码 + return SpringContextUtil.getBean(SentinelStartupRequestFrame.class); + case UP_SET_RESPONSE: return new SentinelSetResponseFrame(); @@ -35,9 +40,9 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); + return new MethaneGetResponseReply(); case UP_TRAP_REQUEST: // TRAP_REQUEST消息回复TRAP_RESPONSE @@ -47,6 +52,10 @@ // ONLINE_REQUEST消息回复ONLINE_RESPONSE return new SentinelOnlineResponseFrame(); + case UP_STARTUP_REQUEST: + // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码 + return SpringContextUtil.getBean(SentinelStartupResponseFrame.class); + default: return null; } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java index 21d9025..9595a99 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java @@ -22,7 +22,7 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } @Override diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java new file mode 100644 index 0000000..2078c1e --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("SentinelStartupRequest") +public class SentinelStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Tube"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java new file mode 100644 index 0000000..21be5bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java @@ -0,0 +1,29 @@ +package com.casic.missiles.frame.sentinel; + +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("SentinelStartupResponse") +public class SentinelStartupResponseFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_STARTUP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java index 5fe773a..b613582 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -15,6 +15,6 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java index 8cc826c..4875dcb 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -8,6 +8,7 @@ import com.casic.missiles.frame.tag.signal.PCITag; import com.casic.missiles.frame.tag.signal.RSRPTag; import com.casic.missiles.frame.tag.signal.SNRTag; +import com.casic.missiles.util.SpringContextUtil; public class BirmmTagBuilderFactory { @@ -16,13 +17,13 @@ if (null != tag) { switch (tag) { case RETRY_TIMES_TAG: - return new RetryTimesTag(); + return SpringContextUtil.getBean(RetryTimesTag.class); case DESTINATION_IP_TAG: - return new DestIPTag(); + return SpringContextUtil.getBean(DestIPTag.class); case DESTINATION_PORT_TAG: - return new DestPortTag(); + return SpringContextUtil.getBean(DestPortTag.class); case DATE_TAG: return new DateTag(); @@ -33,8 +34,11 @@ case UPLOAD_INTERVAL_TAG: return new UploadIntervalTag(); + case SENSOR_STARTUP_TAG: + return SpringContextUtil.getBean(SensorStartupTag.class); + case START_TIME_TAG: - return new StartTimeTag(); + return SpringContextUtil.getBean(StartTimeTag.class); case COLLECT_INTERVAL_TAG: return new CollectIntervalTag(); diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java new file mode 100644 index 0000000..28d6f51 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; + +@EqualsAndHashCode(callSuper = true) +@Component("SensorStartupTag") +@Data +public class SensorStartupTag extends BirmmBaseTag { + + final String STARTUP_TAG_OID = "10000063"; + + String imei; + String iccid; + + @Override + public String toString() { + return super.toString() + "[imei: " + imei + "][iccid: " + iccid + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + + byte[] asciiBytes = BytesUtil.hexStringToBytes(valueStr); + String asciiStr = new String(asciiBytes); + if (asciiStr.length() < 35) { + return; + } + + imei = asciiStr.substring(0, 15); + iccid = asciiStr.substring(15, 35); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java index 9bb4820..71995f5 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -4,9 +4,11 @@ import com.casic.missiles.util.BytesUtil; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("DestIPTag") public class DestIPTag extends BirmmBaseTag { final String DESTINATION_IP_TAG_OID = "10000022"; diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java index ef29dca..1c92a1e 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -4,9 +4,11 @@ import com.casic.missiles.util.BytesUtil; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("DestPortTag") public class DestPortTag extends BirmmBaseTag { final String DESTINATION_PORT_TAG_OID = "10000023"; diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java index 6d21a35..5db36de 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -3,9 +3,11 @@ import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("RetryTimesTag") public class RetryTimesTag extends BirmmBaseTag { final String RETRY_TIMES_TAG_OID = "1000000A"; diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java index 925d162..0ba06cf 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -4,9 +4,11 @@ import com.casic.missiles.util.BytesUtil; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("StartTimeTag") public class StartTimeTag extends BirmmBaseTag { final String START_TIME_TAG_OID = "10000104"; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmOperationTypeEnums.java b/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmOperationTypeEnums.java index 7bca266..c42a6c4 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmOperationTypeEnums.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmOperationTypeEnums.java @@ -9,8 +9,8 @@ */ @Getter public enum BirmmOperationTypeEnums { - DOWN_GET_REQUEST("1", "GetRequest"), - UP_GET_RESPONSE("2", "GetResponse"), + UP_GET_REQUEST("1", "GetRequest"), + DOWN_GET_RESPONSE("2", "GetResponse"), DOWN_SET_REQUEST("3", "SetRequest"), UP_TRAP_REQUEST("4", "TrapRequest"), DOWN_TRAP_RESPONSE("5", "TrapResponse"), 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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.java new file mode 100644 index 0000000..d11f321 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetRequestFrame.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("MethaneSetRequest") +public class MethaneSetRequestFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_SET_REQUEST.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/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java index 980c71c..49804e1 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -1,6 +1,8 @@ package com.casic.missiles.frame.methane; import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; +@Component("MethaneSetResponse") public class MethaneSetResponseFrame extends BirmmBaseFrame { } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java new file mode 100644 index 0000000..da3abfc --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupRequest") +public class MethaneStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Methane"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java new file mode 100644 index 0000000..8d9a261 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneStartupResponseReply.java @@ -0,0 +1,10 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneStartupResponse") +public class MethaneStartupResponseReply extends BirmmBaseFrame { + + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java index d36ab45..e7cf4f9 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -15,12 +15,14 @@ import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.util.BytesUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +@Component("MethaneTrapRequest") @Slf4j public class MethaneTrapRequestFrame extends BirmmBaseFrame { diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index e6298b3..0000000 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.base.BirmmBaseFrame; - -public class MethaneTrapResponseFrame extends BirmmBaseFrame { - - @Override - public void replyPduType() { - StringBuilder pduType; - - int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); - } -} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java new file mode 100644 index 0000000..f818442 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseReply.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import org.springframework.stereotype.Component; + +@Component("MethaneTrapResponse") +public class MethaneTrapResponseReply extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_TRAP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java index 339e604..ff58d7c 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -3,7 +3,8 @@ import com.casic.missiles.enums.BirmmOperationTypeEnums; import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.methane.MethaneGetRequestFrame; -import com.casic.missiles.frame.methane.MethaneGetResponseFrame; +import com.casic.missiles.frame.methane.MethaneGetResponseReply; +import com.casic.missiles.util.SpringContextUtil; public class SentinelFrameBuilderFactory { @@ -11,7 +12,7 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: return new MethaneGetRequestFrame(); case UP_TRAP_REQUEST: @@ -20,6 +21,10 @@ case UP_ONLINE_REQUEST: return new SentinelOnlineRequestFrame(); + case UP_STARTUP_REQUEST: + // StartupRequest 设备开机上报三码 + return SpringContextUtil.getBean(SentinelStartupRequestFrame.class); + case UP_SET_RESPONSE: return new SentinelSetResponseFrame(); @@ -35,9 +40,9 @@ BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); if (operation != null) { switch (operation) { - case DOWN_GET_REQUEST: + case UP_GET_REQUEST: // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); + return new MethaneGetResponseReply(); case UP_TRAP_REQUEST: // TRAP_REQUEST消息回复TRAP_RESPONSE @@ -47,6 +52,10 @@ // ONLINE_REQUEST消息回复ONLINE_RESPONSE return new SentinelOnlineResponseFrame(); + case UP_STARTUP_REQUEST: + // STARTUP_REQUEST消息回复STARTUP_RESPONSE 回复三码 + return SpringContextUtil.getBean(SentinelStartupResponseFrame.class); + default: return null; } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java index 21d9025..9595a99 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelOnlineResponseFrame.java @@ -22,7 +22,7 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } @Override diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java new file mode 100644 index 0000000..2078c1e --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupRequestFrame.java @@ -0,0 +1,22 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmStartupRequestFrame; +import org.springframework.stereotype.Component; + +@Component("SentinelStartupRequest") +public class SentinelStartupRequestFrame extends BirmmStartupRequestFrame { + + @Override + public JSONObject toJSON() { + String DEV_TYPE = "Tube"; + + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + + JSONObject body = json.getJSONObject("mBody"); + body.put("bType", DEV_TYPE + MESSAGE_TYPE); + + return json; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java new file mode 100644 index 0000000..21be5bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelStartupResponseFrame.java @@ -0,0 +1,29 @@ +package com.casic.missiles.frame.sentinel; + +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("SentinelStartupResponse") +public class SentinelStartupResponseFrame extends BirmmBaseFrame { + + @Override + public void replyPduType() { + StringBuilder pduType; + + int pduValue = Integer.parseInt(BirmmOperationTypeEnums.DOWN_STARTUP_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()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java index 5fe773a..b613582 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -15,6 +15,6 @@ pduType.insert(0, "0"); } - this.setPduType(pduType.toString()); + this.setPduType(pduType.toString().toUpperCase()); } } diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java index 8cc826c..4875dcb 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -8,6 +8,7 @@ import com.casic.missiles.frame.tag.signal.PCITag; import com.casic.missiles.frame.tag.signal.RSRPTag; import com.casic.missiles.frame.tag.signal.SNRTag; +import com.casic.missiles.util.SpringContextUtil; public class BirmmTagBuilderFactory { @@ -16,13 +17,13 @@ if (null != tag) { switch (tag) { case RETRY_TIMES_TAG: - return new RetryTimesTag(); + return SpringContextUtil.getBean(RetryTimesTag.class); case DESTINATION_IP_TAG: - return new DestIPTag(); + return SpringContextUtil.getBean(DestIPTag.class); case DESTINATION_PORT_TAG: - return new DestPortTag(); + return SpringContextUtil.getBean(DestPortTag.class); case DATE_TAG: return new DateTag(); @@ -33,8 +34,11 @@ case UPLOAD_INTERVAL_TAG: return new UploadIntervalTag(); + case SENSOR_STARTUP_TAG: + return SpringContextUtil.getBean(SensorStartupTag.class); + case START_TIME_TAG: - return new StartTimeTag(); + return SpringContextUtil.getBean(StartTimeTag.class); case COLLECT_INTERVAL_TAG: return new CollectIntervalTag(); diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java new file mode 100644 index 0000000..28d6f51 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStartupTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; + +@EqualsAndHashCode(callSuper = true) +@Component("SensorStartupTag") +@Data +public class SensorStartupTag extends BirmmBaseTag { + + final String STARTUP_TAG_OID = "10000063"; + + String imei; + String iccid; + + @Override + public String toString() { + return super.toString() + "[imei: " + imei + "][iccid: " + iccid + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + + byte[] asciiBytes = BytesUtil.hexStringToBytes(valueStr); + String asciiStr = new String(asciiBytes); + if (asciiStr.length() < 35) { + return; + } + + imei = asciiStr.substring(0, 15); + iccid = asciiStr.substring(15, 35); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java index 9bb4820..71995f5 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -4,9 +4,11 @@ import com.casic.missiles.util.BytesUtil; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("DestIPTag") public class DestIPTag extends BirmmBaseTag { final String DESTINATION_IP_TAG_OID = "10000022"; diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java index ef29dca..1c92a1e 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -4,9 +4,11 @@ import com.casic.missiles.util.BytesUtil; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("DestPortTag") public class DestPortTag extends BirmmBaseTag { final String DESTINATION_PORT_TAG_OID = "10000023"; diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java index 6d21a35..5db36de 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -3,9 +3,11 @@ import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("RetryTimesTag") public class RetryTimesTag extends BirmmBaseTag { final String RETRY_TIMES_TAG_OID = "1000000A"; diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java index 925d162..0ba06cf 100644 --- a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -4,9 +4,11 @@ import com.casic.missiles.util.BytesUtil; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.stereotype.Component; @EqualsAndHashCode(callSuper = true) @Data +@Component("StartTimeTag") public class StartTimeTag extends BirmmBaseTag { final String START_TIME_TAG_OID = "10000104"; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmOperationTypeEnums.java b/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmOperationTypeEnums.java index 7bca266..c42a6c4 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmOperationTypeEnums.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmOperationTypeEnums.java @@ -9,8 +9,8 @@ */ @Getter public enum BirmmOperationTypeEnums { - DOWN_GET_REQUEST("1", "GetRequest"), - UP_GET_RESPONSE("2", "GetResponse"), + UP_GET_REQUEST("1", "GetRequest"), + DOWN_GET_RESPONSE("2", "GetResponse"), DOWN_SET_REQUEST("3", "SetRequest"), UP_TRAP_REQUEST("4", "TrapRequest"), DOWN_TRAP_RESPONSE("5", "TrapResponse"), diff --git a/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmTagTypeEnums.java b/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmTagTypeEnums.java index 365e940..5e9956d 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmTagTypeEnums.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmTagTypeEnums.java @@ -15,6 +15,7 @@ DATE_TAG("10000050", 3), DATETIME_TAG("10000051", 6), UPLOAD_INTERVAL_TAG("10000062", 2), + SENSOR_STARTUP_TAG("10000063", 35), START_TIME_TAG("10000104", 2), COLLECT_INTERVAL_TAG("10000105", 2), COLLECT_COUNT_TAG("10000106", 2),